home *** CD-ROM | disk | FTP | other *** search
/ Amiga Collections: Purity / Purity #39 (1994-11-16)(Diesel - PackMAN)(DE)[WB].zip / Purity #39 (1994-11-16)(Diesel - PackMAN)(DE)[WB].adf / XTrash / Source / XTrash.dt.p next >
Text File  |  1994-11-15  |  143KB  |  2,564 lines

  1. PROGRAM XTrashDeutsch;
  2.  
  3. {$incl "asl.lib"}
  4. {$incl "exec.lib"}
  5. {$incl "intuition.lib","intuition/intuitionbase.h"}
  6. {$incl "wb.lib"}
  7. {$incl "graphics.lib"}
  8. {$incl "diskfont.lib"}
  9. {$incl "gadtools.lib"}
  10. {$incl "dos.lib","dos/dostags.h"}
  11. {$incl "icon.lib"}
  12.  
  13. LABEL   BACK;
  14.  
  15. CONST   LF = chr($A);
  16.         MyTemplate = "CONFIG";
  17.  
  18. TYPE    p_IconPlane = ^IconPlane;
  19.         IconPlane = Array[1..176] of Word;
  20.         FileString = String[114];
  21.         DirString = String[256];
  22.         DirNameString = String[364];
  23.         p_PathNode = ^PathNode;
  24.         PathNode = RECORD
  25.                 pn_Node: Node
  26.                 pn_Path: DirString
  27.         END;
  28.         p_StringNode = ^StringNode;
  29.         StringNode = RECORD
  30.                 stn_Node: Node
  31.                 stn_String: FileString
  32.         end;
  33.         p_AnchorNode = ^AnchorNode;
  34.         AnchorNode = RECORD
  35.                 ano_Node: Node
  36.                 ano_Anchor: p_AnchorPath
  37.                 ano_Lock: BPTR
  38.         END;
  39.         PointerArray = Array [1..36] of word;
  40.         p_XTrashPreferences = ^XTrashPreferences;
  41.         XTrashPreferences = RECORD
  42.                 IconFile: DirNameString
  43.                 IconName: String[31]
  44.                 IconX,IconY: integer
  45.                 OpenProcessing,Coloured: boolean
  46.                 Trasher: DirString
  47.                 MoveFiles,DeleteTrash: boolean
  48.                 DiskName: String[31]
  49.                 FormatOptions: String[81]
  50.                 Formatter: DirString
  51.                 FormatStack: long
  52.         end;
  53.  
  54. VAR     ImageDataNorm,ImageDataSel:             p_IconPlane;
  55.         ImageNorm,ImageSel:                     Image;
  56.         ImagesObject:                           p_DiskObject;
  57.         ApplicationPort:                        p_MsgPort;
  58.         AppBit  :                               long;
  59.         ApplicationMessage:                     p_AppMessage;
  60.         ApplicationIcon:                        p_AppIcon;
  61.         SIGNALS :                               long;
  62.         DidIt   :                               boolean;
  63.         EndExit :                               integer;
  64.         scr     :                               p_screen;
  65.         VI      :                               ptr;
  66.         DI      :                               p_DrawInfo;
  67.         tattr   :                               TextAttr;
  68.         tfont   :                               p_TextFont;
  69.         FileList,DirList,TrashList,DiskList:    p_List;
  70.         FileNum,DirNum,TrashNum,DiskNum:        long;
  71.         TrashNode,TrashNodeBack:                p_PathNode;
  72.         opLayer,i:                              integer;
  73.         VariableString:                         DirNameString;
  74.         VariableStr:                            STR;
  75.         diskIcon:                               boolean;
  76.         dummy   :                               long;
  77.         InsidePointer:                          ^PointerArray;
  78.         CurrentMethodTrash,CurrentMethodFiles:  boolean;
  79.         CurrentDiskName:                        String[31];
  80.         CurrentFormatOptions:                   String[81];
  81.         MyXTP   :                               XTrashPreferences;
  82.         StartXTP:                               XTrashPreferences;
  83.         DB      :                               p_DosLibrary;
  84.         TheConfiguration:                       DirNameString;
  85.         TheDirectory:                           DirString;
  86.         MyLock  :                               BPTR;
  87.         LockBack:                               BPTR;
  88.  
  89.  
  90. PROCEDURE PrepareNode(VAR TestNode:ptr,Text:Str);
  91. VAR     TextNode:                               p_PathNode;
  92. BEGIN
  93.         TextNode:=TestNode;
  94.         TextNode^.pn_Node.ln_Succ:=NIL;
  95.         TextNode^.pn_Node.ln_Pred:=NIL;
  96.         TextNode^.pn_Node.ln_Type:=NT_UNKNOWN;
  97.         TextNode^.pn_Path:=Text;
  98.         TextNode^.pn_Node.ln_Name:=TextNode^.pn_Path;
  99. END;
  100.  
  101. PROCEDURE InitList(TestList:p_List);
  102. BEGIN
  103.         WITH TestList^ DO BEGIN
  104.                 lh_tail:=NIL;
  105.                 lh_TailPred:=Ptr(TestList);
  106.                 lh_head:=Ptr(Long(TestList)+4)
  107.         END
  108. END;
  109.  
  110. FUNCTION CreatePort(name:Str,pri:Byte):p_MsgPort;
  111. VAR     port    :                               p_MsgPort;
  112.         sigbit  :                               Byte;
  113. BEGIN
  114.         port:=ptr(Alloc_Mem(SizeOf(MsgPort),MEMF_CLEAR or MEMF_PUBLIC));
  115.         sigbit:=AllocSignal(-1);
  116.         with port^, mp_Node do begin
  117.                 ln_Name:=name;
  118.                 ln_Pri:=pri;
  119.                 ln_Type:=NT_MSGPORT;
  120.                 mp_Flags:=PA_SIGNAL;
  121.                 mp_SigBit:=sigbit;
  122.                 mp_SigTask:=FindTask(NIL);
  123.                 AddPort(port)
  124.         end;
  125.         CreatePort:=port
  126. END;
  127.  
  128. PROCEDURE DeletePort(port:p_MsgPort);
  129. BEGIN
  130.         RemPort (port);
  131.         FreeSignal(port^.mp_SigBit);
  132.         Free_Mem (Long(port), SizeOf (port^) )
  133. END;
  134.  
  135. FUNCTION GiveQuestion(Title,Introducer,Possibilities:DirNameString,win:p_window):Long;
  136. VAR     ES      :                               EasyStruct;
  137. BEGIN
  138.         VariableString:=Introducer;
  139.         ES:=EasyStruct(sizeof(EasyStruct),0,Title,VariableString,Possibilities);
  140.         GiveQuestion:=EasyRequestArgs(win,^es,NIL,NIL)
  141. END;
  142.  
  143. PROCEDURE GiveError(Title,Introducer:DirNameString,win:p_window);
  144. VAR     ES      :                               EasyStruct;
  145.         Dummy   :                               long;
  146. BEGIN
  147.         VariableString:=Introducer;
  148.         ES:=EasyStruct(sizeof(EasyStruct),0,Title,VariableString,"OK");
  149.         Dummy:=EasyRequestArgs(win,^es,NIL,NIL)
  150. END;
  151.  
  152. PROCEDURE NormalPointer(win:p_window);
  153. BEGIN
  154.         ClearPointer (win)
  155. END;
  156.  
  157. PROCEDURE InitWaitPointer;
  158. BEGIN
  159.         InsidePointer:=Ptr(AllocVec(SizeOf(PointerArray),MEMF_CHIP));
  160.         InsidePointer^:=PointerArray(
  161.                 $0   ,$0   ,
  162.                 $0400,$07C0,
  163.                 $0000,$07C0,
  164.                 $0100,$0380,
  165.                 $0000,$07E0,
  166.                 $07C0,$1FF8,
  167.                 $1FF0,$3FEC,
  168.                 $3FF8,$7FDE,
  169.                 $3FF8,$7FBE,
  170.                 $7FFC,$FF7F,
  171.                 $7EFC,$FFFF,
  172.                 $7FFC,$FFFF,
  173.                 $3FF8,$7FFE,
  174.                 $3FF8,$7FFE,
  175.                 $1FF0,$3FFC,
  176.                 $07C0,$1FF8,
  177.                 $0000,$07E0,
  178.                 $0   ,$0
  179.         );
  180. END;
  181.  
  182. PROCEDURE WaitPointer(win:p_window);
  183. BEGIN
  184.         SetPointer(win,InsidePointer,16,16,-6,0);
  185. END;
  186.  
  187.  
  188. PROCEDURE InitAppIcon;
  189. BEGIN
  190.         if MyXTP.IconFile="" then dummy:=-1 else begin
  191.                 if length(MyXTP.IconFile)>4 then
  192.                         DidIt:=copy(MyXTP.IconFile,length(MyXTP.IconFile)-4,5)=".info"
  193.                 else DidIt:=FALSE;
  194.                 if DidIt then begin
  195.                         VariableString:=copy(MyXTP.IconFile,1,length(MyXTP.IconFile)-5);
  196.                         ImagesObject:=GetDiskObjectNew(VariableString)
  197.                 end else
  198.                         ImagesObject:=GetDiskObjectNew(MyXTP.IconFile);
  199.                 dummy:=IOErr
  200.         end;
  201.         if dummy<>0 then begin
  202.                 if dummy>0 then begin
  203.                         Dummy:=long(Fault(Dummy,NIL,VariableString,364));
  204.                         GiveError ("XTrash 1.01 - ["+MyXTP.IconFile+"]","Piktogramm konnte nicht geladen werden -"+LF+"("+VariableString+")",NIL);
  205.                 end;
  206.                 new(ImagesObject);
  207.                 ImageDataNorm:=PTR(AllocVec(SizeOf(IconPlane),MEMF_CHIP));
  208.                 ImageDataNorm^:=IconPlane(
  209.                         $0000,$0000,$0000,$0400,$0000,$0000,$0800,$0C00,
  210.                         $0000,$0100,$0100,$0C00,$0060,$6162,$0090,$0C00,
  211.                         $01F9,$F830,$F604,$0C00,$07FF,$FE31,$1FE2,$0C00,
  212.                         $07FF,$FE3D,$A0BA,$0C00,$01FF,$FBBD,$3E89,$0C00,
  213.                         $01FF,$FAF3,$FF89,$0C00,$07FF,$FE39,$D9C9,$0C00,
  214.                         $07FF,$FE9F,$FEF5,$2C00,$01F9,$F9FF,$FFF1,$AC00,
  215.                         $0060,$65DF,$FFE1,$2C00,$0000,$074F,$FFF3,$CC00,
  216.                         $0000,$419F,$FFEF,$0C00,$1002,$CB4F,$FFFF,$1C00,
  217.                         $0002,$8A77,$FFFF,$8C00,$0000,$8A25,$FFE6,$CC00,
  218.                         $0000,$C434,$FF3F,$0C00,$0002,$8616,$BFEC,$0C00,
  219.                         $0000,$8007,$1002,$0C00,$7FFF,$FFFF,$FFFF,$FC00,
  220.  
  221.                         $FFFF,$FFFF,$FFFF,$F800,$D555,$5555,$5555,$5000,
  222.                         $D555,$5455,$5455,$5000,$D575,$7415,$5545,$5000,
  223.                         $D5FD,$FD45,$0151,$5000,$D7FF,$FF44,$4015,$5000,
  224.                         $D1FF,$F940,$5545,$5000,$D47F,$E440,$4154,$5000,
  225.                         $D5FF,$FD04,$0054,$5000,$D7FF,$FF44,$0414,$5000,
  226.                         $D1F9,$F940,$0100,$5000,$D464,$6400,$0004,$5000,
  227.                         $D515,$1000,$0014,$5000,$D555,$5010,$0004,$1000,
  228.                         $D555,$1440,$0010,$5000,$C555,$1410,$0000,$4000,
  229.                         $D555,$5500,$0000,$5000,$D555,$5550,$0011,$1000,
  230.                         $D555,$1141,$0040,$5000,$D555,$5141,$4011,$5000,
  231.                         $D555,$5550,$4555,$5000,$8000,$0000,$0000,$0000
  232.                 );
  233.                 ImageNorm:=Image(0,0,54,22,2,ImageDataNorm,3,0,NIL);
  234.  
  235.                 ImageDataSel:=PTR(AllocVec(SizeOf(IconPlane),MEMF_CHIP));
  236.                 ImageDataSel^:=IconPlane(
  237.                         $0000,$0000,$0000,$0400,$0000,$0000,$0800,$0C00,
  238.                         $0000,$0100,$0100,$0C00,$0040,$4162,$0090,$0C00,
  239.                         $0151,$5030,$F604,$0C00,$0555,$5431,$1FE2,$0C00,
  240.                         $0755,$563D,$A0BA,$0C00,$01D5,$5BBD,$3E89,$0C00,
  241.                         $0155,$52F3,$FF89,$0C00,$0555,$5439,$D9C9,$0C00,
  242.                         $0757,$569F,$FEF5,$2C00,$01D9,$D9FF,$FFF1,$AC00,
  243.                         $0060,$65DF,$FFE1,$2C00,$0000,$074F,$FFF3,$CC00,
  244.                         $0000,$419F,$FFEF,$0C00,$1002,$CBFF,$FFFF,$1C00,
  245.                         $0002,$8AFF,$FFFF,$8C00,$0000,$8A3D,$FFE6,$CC00,
  246.                         $0000,$553C,$FF3F,$0C00,$0002,$9516,$BFEC,$0C00,
  247.                         $0000,$8507,$1002,$0C00,$7FFF,$FDFF,$FFFF,$FC00,
  248.  
  249.                         $FFFF,$FFFF,$FFFF,$F800,$D555,$5555,$5555,$5000,
  250.                         $D555,$5455,$5455,$5000,$D575,$7415,$5545,$5000,
  251.                         $D5FD,$FD45,$0151,$5000,$D7FF,$FF44,$4015,$5000,
  252.                         $D1FF,$F940,$5545,$5000,$D47F,$E440,$4154,$5000,
  253.                         $D5FF,$FD04,$0054,$5000,$D7FF,$FF44,$0414,$5000,
  254.                         $D1F9,$F940,$0100,$5000,$D464,$6400,$0004,$5000,
  255.                         $D515,$1005,$5014,$5000,$D555,$5011,$5004,$1000,
  256.                         $D555,$1440,$5010,$5000,$C555,$17FC,$1000,$4000,
  257.                         $D555,$55FC,$0000,$5000,$D555,$557C,$0011,$1000,
  258.                         $D555,$FF4D,$0040,$5000,$D555,$7F41,$4011,$5000,
  259.                         $D555,$5F50,$4555,$5000,$8000,$0300,$0000,$0000
  260.                 );
  261.                 ImageSel:=Image(0,0,54,22,2,ImageDataSel,3,0,NIL);
  262.  
  263.                 ImagesObject^:=DiskObject(0,0,Gadget(NIL,0,0,54,23,GADGIMAGE or
  264.                         GADGHIMAGE,RELVERIFY,BOOLGADGET,^ImageNorm,^ImageSel,
  265.                         NIL,0,NIL,0,NIL),0,NIL,NIL,NO_ICON_POSITION,NO_ICON_POSITION,
  266.                         NIL,NIL,0);
  267.                 diskIcon:=FALSE
  268.         end else
  269.                 diskIcon:=TRUE;
  270.  
  271.         if MyXTP.IconX>-1 then ImagesObject^.do_CurrentX:=MyXTP.IconX else ImagesObject^.do_CurrentX:=NO_ICON_POSITION;
  272.         if MyXTP.IconY>-1 then ImagesObject^.do_CurrentY:=MyXTP.IconY else ImagesObject^.do_CurrentY:=NO_ICON_POSITION;
  273.  
  274.         if MyXTP.IconName<>"" then
  275.                 ApplicationIcon:=AddAppIconA(1,0,MyXTP.IconName,ApplicationPort,NIL,ImagesObject,NIL)
  276.         else
  277.                 ApplicationIcon:=AddAppIconA(1,0,"XTrash",ApplicationPort,NIL,ImagesObject,NIL);
  278. END;
  279.  
  280.  
  281. FUNCTION ReadXTrashPrefs(FileName:DirNameString,VAR RealPrefs:XTrashPreferences):boolean;
  282. VAR     ReadFile:                               Text;
  283.         Dummy   :                               long;
  284.         Identifier:                             string[14];
  285. LABEL   ExitOut;
  286. BEGIN
  287.         ReSet(ReadFile,FileName);
  288.         Dummy:=IOResult;
  289.         if Dummy<>0 then begin
  290.                 ReadXTrashPrefs:=FALSE;
  291.                 goto ExitOut
  292.         end;
  293.         readln (ReadFile,Identifier);
  294.         if Identifier<>"XTRASH PREFS" then begin ReadXTrashPrefs:=FALSE; close(ReadFile); goto ExitOut end;
  295.         with RealPrefs do begin
  296.                 readln(ReadFile,IconFile);
  297.                 readln(ReadFile,IconName);
  298.                 readln(ReadFile,IconX);
  299.                 readln(ReadFile,IconY);
  300.                 readln(ReadFile,dummy);
  301.                 OpenProcessing:=boolean(dummy);
  302.                 readln(ReadFile,dummy);
  303.                 Coloured:=boolean(dummy);
  304.                 readln(ReadFile,Trasher);
  305.                 readln(ReadFile,dummy);
  306.                 MoveFiles:=boolean(dummy);
  307.                 readln(ReadFile,dummy);
  308.                 DeleteTrash:=boolean(dummy);
  309.                 readln(ReadFile,DiskName);
  310.                 readln(ReadFile,FormatOptions);
  311.                 readln(ReadFile,Formatter);
  312.                 readln(ReadFile,FormatStack)
  313.         end;
  314.         Dummy:=IOResult;
  315.         Close(ReadFile);
  316.         if Dummy<>0 then begin
  317.                 ReadXTrashPrefs:=FALSE;
  318.                 goto ExitOut
  319.         end;
  320.         ReadXTrashPrefs:=TRUE;
  321.         ExitOut:
  322. END;
  323.  
  324. FUNCTION WriteXTrashPrefs(FileName:DirNameString,RealPrefs:XTrashPreferences,win:p_window):boolean;
  325. VAR     WriteFile:                              Text;
  326.         Dummy   :                               integer;
  327. LABEL   ExitOut;
  328. BEGIN
  329.         ReWrite(WriteFile,FileName);
  330.         Dummy:=IOResult;
  331.         if Dummy<>0 then begin
  332.                 Dummy:=integer(Fault(Dummy,NIL,VariableString,364));
  333.                 GiveError("XTrash 1.01  - Einstellungen sichern","Die Einstellungen konnten nicht"+LF+"gesichert werden."+LF+"("+VariableString+")",win);
  334.                 WriteXTrashPrefs:=FALSE;
  335.                 goto ExitOut
  336.         end;
  337.         writeln (WriteFile,"XTRASH PREFS");
  338.         with RealPrefs do begin
  339.                 writeln(WriteFile,IconFile);
  340.                 writeln(WriteFile,IconName);
  341.                 writeln(WriteFile,IconX);
  342.                 writeln(WriteFile,IconY);
  343.                 writeln(WriteFile,long(OpenProcessing));
  344.                 writeln(WriteFile,long(Coloured));
  345.                 writeln(WriteFile,Trasher);
  346.                 writeln(WriteFile,long(MoveFiles));
  347.                 writeln(WriteFile,long(DeleteTrash));
  348.                 writeln(WriteFile,DiskName);
  349.                 writeln(WriteFile,FormatOptions);
  350.                 writeln(WriteFile,Formatter);
  351.                 writeln(WriteFile,FormatStack)
  352.         end;
  353.         Close(WriteFile);
  354.         Dummy:=IOResult;
  355.         if Dummy<>0 then begin
  356.                 Dummy:=integer(Fault(Dummy,NIL,VariableString,364));
  357.                 GiveError("XTrash 1.01  - Einstellungen sichern","Die Einstellungen konnten nicht"+LF+"gesichert werden."+LF+"("+VariableString+")",win);
  358.                 WriteXTrashPrefs:=FALSE;
  359.                 goto ExitOut
  360.         end;
  361.         WriteXTrashPrefs:=TRUE;
  362.         ExitOut:
  363. END;
  364.  
  365.  
  366. FUNCTION PopUpFiler(Typ:integer,Pattern:boolean,win:p_Window):boolean;
  367. VAR     Filer   :                               p_FileRequester;
  368.         TagsCHANGES:                            array[1..14] of TagItem;
  369.         Dummy   :                               Boolean;
  370.         maestro :                               text;
  371. BEGIN
  372.         TagsCHANGES[1].ti_Tag:=ASL_Hail;
  373.         case Typ of
  374.                 1:      TagsCHANGES[1].ti_Data:="XTrash 1.01 - Verzeichnis wählen"
  375.                 2:      TagsCHANGES[1].ti_Data:="XTrash 1.01 - Programm wählen"
  376.                 else
  377.         end;
  378.         TagsCHANGES[2].ti_Tag:=ASL_File;
  379.         TagsCHANGES[3].ti_Tag:=ASL_Dir;
  380.         Reset(maestro,VariableString);
  381.         if IOResult<>0 then begin
  382.                 TagsCHANGES[2].ti_Data:=0;
  383.                 TagsCHANGES[3].ti_Data:=VariableString
  384.         end else begin
  385.                 close(maestro);
  386.                 TagsCHANGES[2].ti_Data:=long(FilePart(VariableString));
  387.                 TagsCHANGES[3].ti_Data:=copy(VariableString,1,length(VariableString)-length(PathPart(VariableString)));
  388.         end;
  389.         TagsCHANGES[4]:=TagItem(ASL_FuncFlags,FILF_PATGAD);
  390.         TagsCHANGES[5].ti_Tag:=ASL_Pattern;
  391.         if pattern then TagsCHANGES[5].ti_Data:="~(#?.info)" else TagsCHANGES[5].ti_Data:="#?.info";
  392.         TagsCHANGES[6].ti_Tag:=ASL_OKText;
  393.         TagsCHANGES[6].ti_Data:="OK";
  394.         TagsCHANGES[7].ti_Tag:=ASL_CancelText;
  395.         TagsCHANGES[7].ti_Data:="Zurück";
  396.         TagsCHANGES[8].ti_Tag:=ASL_Window;
  397.         TagsCHANGES[8].ti_Data:=long(win);
  398.         TagsCHANGES[9]:=TagItem(ASL_LeftEdge,50);
  399.         TagsCHANGES[10]:=TagItem(ASL_TopEdge,28);
  400.         TagsCHANGES[11]:=TagItem(ASL_Height,210);
  401.         TagsCHANGES[12]:=TagItem(ASL_Width,340);
  402.         if Typ<>1 then TagsCHANGES[13].ti_Tag:=TAG_DONE
  403.         else begin
  404.                 TagsCHANGES[13]:=TagItem(ASL_ExtFlags1,FIL1F_NOFILES);
  405.                 TagsCHANGES[14].ti_Tag:=TAG_DONE
  406.         end;
  407.  
  408.         Filer:=AllocAslRequest(ASL_FileRequest,^TagsCHANGES);
  409.         Dummy:=AslRequest(Filer,NIL);
  410.         if Dummy then begin
  411.                 VariableString:=Filer^.rf_Dir;
  412.                 if Typ<>1 then dummy:=AddPart(VariableString,Filer^.rf_File,255) else dummy:=TRUE;
  413.                 PopUpFiler:=dummy
  414.         end else
  415.                 PopUpFiler:=FALSE;
  416.         FreeAslRequest(Filer);
  417. END;
  418.  
  419.  
  420. PROCEDURE RestoreXTP(ThisXTP:p_XTrashPreferences,GadgetMethodFiles,GadgetMethodTrash,
  421.         GadgetDiskName,GadgetFormatOptions,GadgetFormatWhere,GadgetFormatStack,
  422.         GadgetTrashWhere,GadgetIconWhere,GadgetIconName,GadgetIconX,GadgetIconY,
  423.         GadgetColoured,GadgetPanel:p_gadget,win:p_window);
  424. VAR     TagsCHANGES:                            array[1..2] of TagItem;
  425. BEGIN
  426.         TagsCHANGES[1]:=TagItem(GTMX_Active,long(ThisXTP^.MoveFiles));
  427.         TagsCHANGES[2].ti_Tag:=TAG_END;
  428.         GT_SetGadgetAttrsA(GadgetMethodFiles,win,NIL,^TagsCHANGES);
  429.  
  430.         TagsCHANGES[1]:=TagItem(GTMX_Active,long(ThisXTP^.DeleteTrash));
  431.         TagsCHANGES[2].ti_Tag:=TAG_END;
  432.         GT_SetGadgetAttrsA(GadgetMethodTrash,win,NIL,^TagsCHANGES);
  433.  
  434.         TagsCHANGES[1].ti_Tag:=GTST_String; TagsCHANGES[1].ti_Data:=ThisXTP^.DiskName;
  435.         TagsCHANGES[2].ti_Tag:=TAG_END;
  436.         GT_SetGadgetAttrsA(GadgetDiskName,win,NIL,^TagsCHANGES);
  437.  
  438.         TagsCHANGES[1].ti_Tag:=GTST_String; TagsCHANGES[1].ti_Data:=ThisXTP^.FormatOptions;
  439.         TagsCHANGES[2].ti_Tag:=TAG_END;
  440.         GT_SetGadgetAttrsA(GadgetFormatOptions,win,NIL,^TagsCHANGES);
  441.  
  442.         TagsCHANGES[1].ti_Tag:=GTST_String; TagsCHANGES[1].ti_Data:=ThisXTP^.Formatter;
  443.         TagsCHANGES[2].ti_Tag:=TAG_END;
  444.         GT_SetGadgetAttrsA(GadgetFormatWhere,win,NIL,^TagsCHANGES);
  445.  
  446.         TagsCHANGES[1]:=TagItem(GTIN_Number,ThisXTP^.FormatStack);
  447.         TagsCHANGES[2].ti_Tag:=TAG_END;
  448.         GT_SetGadgetAttrsA(GadgetFormatStack,win,NIL,^TagsCHANGES);
  449.  
  450.         TagsCHANGES[1].ti_Tag:=GTST_String; TagsCHANGES[1].ti_Data:=ThisXTP^.Trasher;
  451.         TagsCHANGES[2].ti_Tag:=TAG_END;
  452.         GT_SetGadgetAttrsA(GadgetTrashWhere,win,NIL,^TagsCHANGES);
  453.  
  454.         TagsCHANGES[1].ti_Tag:=GTST_String; TagsCHANGES[1].ti_Data:=ThisXTP^.IconFile;
  455.         TagsCHANGES[2].ti_Tag:=TAG_END;
  456.         GT_SetGadgetAttrsA(GadgetIconWhere,win,NIL,^TagsCHANGES);
  457.  
  458.         TagsCHANGES[1].ti_Tag:=GTST_String; TagsCHANGES[1].ti_Data:=ThisXTP^.IconName;
  459.         TagsCHANGES[2].ti_Tag:=TAG_END;
  460.         GT_SetGadgetAttrsA(GadgetIconName,win,NIL,^TagsCHANGES);
  461.  
  462.         TagsCHANGES[1]:=TagItem(GTIN_Number,ThisXTP^.IconX);
  463.         TagsCHANGES[2].ti_Tag:=TAG_END;
  464.         GT_SetGadgetAttrsA(GadgetIconX,win,NIL,^TagsCHANGES);
  465.  
  466.         TagsCHANGES[1]:=TagItem(GTIN_Number,ThisXTP^.IconY);
  467.         TagsCHANGES[2].ti_Tag:=TAG_END;
  468.         GT_SetGadgetAttrsA(GadgetIconY,win,NIL,^TagsCHANGES);
  469.  
  470.         TagsCHANGES[1]:=TagItem(GTCB_Checked,long(ThisXTP^.Coloured));
  471.         TagsCHANGES[2].ti_Tag:=TAG_END;
  472.         GT_SetGadgetAttrsA(GadgetColoured,win,NIL,^TagsCHANGES);
  473.  
  474.         TagsCHANGES[1]:=TagItem(GTCB_Checked,long(ThisXTP^.OpenProcessing));
  475.         TagsCHANGES[2].ti_Tag:=TAG_END;
  476.         GT_SetGadgetAttrsA(GadgetPanel,win,NIL,^TagsCHANGES)
  477. END;
  478.  
  479. PROCEDURE GetRidOfForPreferencesXTrash(VAR win:p_window);
  480. VAR     DidIt   :                               boolean;
  481. BEGIN
  482.         DidIt:=ModifyIDCMP(win,0);
  483.         win^.firstgadget^.nextgadget^.nextgadget^.nextgadget^.nextgadget:=NIL
  484. END;
  485.  
  486. PROCEDURE GetBackForPreferencesXTrash(VAR win:p_window,GadgetCycle:p_gadget);
  487. VAR     DidIt   :                               boolean;
  488. BEGIN
  489.         win^.firstgadget^.nextgadget^.nextgadget^.nextgadget^.nextgadget:=GadgetCycle;
  490.         DidIt:=ModifyIDCMP(win,IDCMP_CLOSEWINDOW or IDCMP_GADGETUP or IDCMP_VANILLAKEY or IDCMP_GADGETDOWN);
  491.         RefreshGadgets(win^.FirstGadget,win,NIL);
  492.         GT_RefreshWindow(win,NIL);
  493. END;
  494.  
  495. PROCEDURE PreferencesXTrash;
  496. LABEL   BACK;
  497. VAR     win     :                               p_window;
  498.         winBit  :                               long;
  499.         CG      :                               p_gadget;
  500.         CurrentGadget:                          p_gadget;
  501.         NewGadgetFields:                        newgadget;
  502.         GadgetCurrent:                          p_gadget;
  503.         GadgetMethodFiles:                      p_gadget;
  504.         GadgetMethodTrash:                      p_gadget;
  505.         GadgetDiskName:                         p_gadget;
  506.         GadgetFormatOptions:                    p_gadget;
  507.         GadgetFormatWhere:                      p_gadget;
  508.         GadgetFormatFiler:                      p_gadget;
  509.         GadgetFormatStack:                      p_gadget;
  510.         GadgetTrashWhere:                       p_gadget;
  511.         GadgetTrashFiler:                       p_gadget;
  512.         GadgetIconWhere:                        p_gadget;
  513.         GadgetIconFiler:                        p_gadget;
  514.         GadgetIconName:                         p_gadget;
  515.         GadgetIconX:                            p_gadget;
  516.         GadgetIconY:                            p_gadget;
  517.         GadgetColoured:                         p_gadget;
  518.         GadgetPanel:                            p_gadget;
  519.         GadgetCancel:                           p_gadget;
  520.         GadgetUse:                              p_gadget;
  521.         GadgetSave:                             p_gadget;
  522.         MethodTrashContents:                    array[1..3] of str;
  523.         MethodFilesContents:                    array[1..3] of str;
  524.         DidIt   :                               boolean;
  525.         imsg    :                               p_intuimessage;
  526.         SIGNALS :                               long;
  527.         MyEndExit:                              integer;
  528.         ThisXTP :                               XTrashPreferences;
  529.         ChangeASG:                              array [0..1] of Byte;
  530.         SI      :                               p_StringInfo;
  531.         TagsCHANGES:                            array[1..13] of TagItem;
  532.         ZOM     :                               array[1..4] of word;
  533.         NewMenuFields:                          array[1..5] of NewMenu;
  534.         MenuFields:                             p_Menu;
  535.         NItem   :                               p_menuitem;
  536.         ChosenMenu:                             long;
  537. BEGIN
  538.         CG:=NIL;
  539.         CG:=CreateContext(^CG);
  540.         ChangeASG[0]:=DI^.dri_Pens^[SHADOWPEN];
  541.         ChangeASG[1]:=DI^.dri_Pens^[SHINEPEN];
  542.         if ChangeASG[0]=ChangeASG[1] then
  543.                 ChangeASG[0]:=DI^.dri_Pens^[FILLTEXTPEN];
  544.  
  545.         ThisXTP:=MyXTP;
  546.  
  547.         TagsCHANGES[1]:=TagItem(GT_UnderScore,long("_"));
  548.         TagsCHANGES[2].ti_Tag:=TAG_END;
  549.         NewGadgetFields:=NewGadget(226,7,130,12,"aktuelle _Werte",^tattr,1,PLACETEXT_IN,
  550.                 VI,NIL);
  551.         GadgetCurrent:=CreateGadgetA(BUTTON_KIND,CG,^NewGadgetFields,^TagsCHANGES);
  552.  
  553.         MethodFilesContents[1]:="_Dateien löschen ";
  554.         MethodFilesContents[2]:="Dateien in Mülleimer _bewegen";
  555.         MethodFilesContents[3]:=NIL;
  556.         TagsCHANGES[1]:=TagItem(GT_UnderScore,long("_"));
  557.         TagsCHANGES[2]:=TagItem(GTMX_Labels,long(^MethodFilesContents));
  558.         TagsCHANGES[3]:=TagItem(GTMX_Spacing,3);
  559.         TagsCHANGES[4]:=TagItem(GTMX_Active,long(ThisXTP.MoveFiles));
  560.         TagsCHANGES[5].ti_Tag:=TAG_END;
  561.         NewGadgetFields:=NewGadget(14,8,0,0,NIL,^tattr,2,PLACETEXT_RIGHT,VI,NIL);
  562.         GadgetMethodFiles:=CreateGadgetA(MX_KIND,GadgetCurrent,^NewGadgetFields,
  563.                 ^TagsCHANGES);
  564.  
  565.         MethodTrashContents[1]:="Mülleimer _leeren";
  566.         MethodTrashContents[2]:="_Mülleimer löschen";
  567.         MethodTrashContents[3]:=NIL;
  568.         TagsCHANGES[1]:=TagItem(GT_UnderScore,long("_"));
  569.         TagsCHANGES[2]:=TagItem(GTMX_Labels,long(^MethodTrashContents));
  570.         TagsCHANGES[3]:=TagItem(GTMX_Spacing,3);
  571.         TagsCHANGES[4]:=TagItem(GTMX_Active,long(ThisXTP.DeleteTrash));
  572.         TagsCHANGES[5].ti_Tag:=TAG_END;
  573.         NewGadgetFields:=NewGadget(14,32,0,0,NIL,^tattr,3,PLACETEXT_RIGHT,VI,NIL);
  574.         GadgetMethodTrash:=CreateGadgetA(MX_KIND,GadgetMethodFiles,
  575.                 ^NewGadgetFields,^TagsCHANGES);
  576.  
  577.         TagsCHANGES[1]:=TagItem(GTST_MaxChars,30);
  578.         TagsCHANGES[2].ti_Tag:=GTST_String; TagsCHANGES[2].ti_Data:=ThisXTP.DiskName;
  579.         TagsCHANGES[3]:=TagItem(GT_Underscore,long("_"));
  580.         TagsCHANGES[4].ti_Tag:=TAG_END;
  581.         NewGadgetFields:=NewGadget(96,57,260,12,"Fmt. _Name",^tattr,4,PLACETEXT_LEFT,
  582.                 VI,NIL);
  583.         GadgetDiskName:=CreateGadgetA(STRING_KIND,GadgetMethodTrash,^NewGadgetFields,
  584.                 ^TagsCHANGES);
  585.  
  586.         TagsCHANGES[1]:=TagItem(GTST_MaxChars,80);
  587.         TagsCHANGES[2].ti_Tag:=GTST_String; TagsCHANGES[2].ti_Data:=ThisXTP.FormatOptions;
  588.         TagsCHANGES[3]:=TagItem(GT_Underscore,long("_"));
  589.         TagsCHANGES[4].ti_Tag:=TAG_END;
  590.         NewGadgetFields:=NewGadget(96,69,260,12,"_Optionen",^tattr,5,
  591.                 PLACETEXT_LEFT,VI,NIL);
  592.         GadgetFormatOptions:=CreateGadgetA(STRING_KIND,GadgetDiskName,
  593.                 ^NewGadgetFields,^TagsCHANGES);
  594.  
  595.         TagsCHANGES[1]:=TagItem(GTST_MaxChars,255);
  596.         TagsCHANGES[2].ti_Tag:=GTST_String; TagsCHANGES[2].ti_Data:=ThisXTP.Formatter;
  597.         TagsCHANGES[3]:=TagItem(GT_Underscore,long("_"));
  598.         TagsCHANGES[4].ti_Tag:=TAG_END;
  599.         NewGadgetFields:=NewGadget(96,81,188,12,"_Programm",^tattr,6,
  600.                 PLACETEXT_LEFT,VI,NIL);
  601.         GadgetFormatWhere:=CreateGadgetA(STRING_KIND,GadgetFormatOptions,
  602.                 ^NewGadgetFields,^TagsCHANGES);
  603.  
  604.         NewGadgetFields:=NewGadget(284,81,72,12,"Get...",^tattr,7,
  605.                 PLACETEXT_IN,VI,NIL);
  606.         GadgetFormatFiler:=CreateGadgetA(BUTTON_KIND,GadgetFormatWhere,
  607.                 ^NewGadgetFields,NIL);
  608.  
  609.         TagsCHANGES[1]:=TagItem(GT_Underscore,long("_"));
  610.         TagsCHANGES[2]:=TagItem(GTIN_Number,ThisXTP.FormatStack);
  611.         TagsCHANGES[3].ti_Tag:=TAG_END;
  612.         NewGadgetFields:=NewGadget(96,93,100,12,"_Stack",^tattr,8,PLACETEXT_LEFT,
  613.                 VI,NIL);
  614.         GadgetFormatStack:=CreateGadgetA(INTEGER_KIND,GadgetFormatFiler,^NewGadgetFields,
  615.                 ^TagsCHANGES);
  616.  
  617.         TagsCHANGES[1]:=TagItem(GTST_MaxChars,255);
  618.         TagsCHANGES[2].ti_Tag:=GTST_String; TagsCHANGES[2].ti_Data:=ThisXTP.Trasher;
  619.         TagsCHANGES[3]:=TagItem(GT_Underscore,long("_"));
  620.         TagsCHANGES[4].ti_Tag:=TAG_END;
  621.         NewGadgetFields:=NewGadget(160,109,124,12,"Bewegen-M_ülleimer",^tattr,9,
  622.                 PLACETEXT_LEFT,VI,NIL);
  623.         GadgetTrashWhere:=CreateGadgetA(STRING_KIND,GadgetFormatStack,
  624.                 ^NewGadgetFields,^TagsCHANGES);
  625.  
  626.         NewGadgetFields:=NewGadget(284,109,72,12,"Get...",^tattr,10,
  627.                 PLACETEXT_IN,VI,NIL);
  628.         GadgetTrashFiler:=CreateGadgetA(BUTTON_KIND,GadgetTrashWhere,
  629.                 ^NewGadgetFields,NIL);
  630.  
  631.         TagsCHANGES[1]:=TagItem(GTST_MaxChars,255);
  632.         TagsCHANGES[2].ti_Tag:=GTST_String; TagsCHANGES[2].ti_Data:=ThisXTP.IconFile;
  633.         TagsCHANGES[3]:=TagItem(GT_Underscore,long("_"));
  634.         TagsCHANGES[4].ti_Tag:=TAG_END;
  635.         NewGadgetFields:=NewGadget(96,125,188,12,"P_iktogr.",^tattr,11,
  636.                 PLACETEXT_LEFT,VI,NIL);
  637.         GadgetIconWhere:=CreateGadgetA(STRING_KIND,GadgetTrashFiler,
  638.                 ^NewGadgetFields,^TagsCHANGES);
  639.  
  640.         NewGadgetFields:=NewGadget(284,125,72,12,"Get...",^tattr,12,
  641.                 PLACETEXT_IN,VI,NIL);
  642.         GadgetIconFiler:=CreateGadgetA(BUTTON_KIND,GadgetIconWhere,
  643.                 ^NewGadgetFields,NIL);
  644.  
  645.         TagsCHANGES[1]:=TagItem(GTST_MaxChars,30);
  646.         TagsCHANGES[2].ti_Tag:=GTST_String; TagsCHANGES[2].ti_Data:=ThisXTP.IconName;
  647.         TagsCHANGES[3]:=TagItem(GT_Underscore,long("_"));
  648.         TagsCHANGES[4].ti_Tag:=TAG_END;
  649.         NewGadgetFields:=NewGadget(96,137,260,12,"N_ame",^tattr,13,
  650.                 PLACETEXT_LEFT,VI,NIL);
  651.         GadgetIconName:=CreateGadgetA(STRING_KIND,GadgetIconFiler,
  652.                 ^NewGadgetFields,^TagsCHANGES);
  653.  
  654.         TagsCHANGES[1]:=TagItem(GT_Underscore,long("_"));
  655.         TagsCHANGES[2]:=TagItem(GTIN_Number,ThisXTP.IconX);
  656.         TagsCHANGES[3].ti_Tag:=TAG_END;
  657.         NewGadgetFields:=NewGadget(96,149,52,12,"_X",^tattr,14,PLACETEXT_LEFT,
  658.                 VI,NIL);
  659.         GadgetIconX:=CreateGadgetA(INTEGER_KIND,GadgetIconName,^NewGadgetFields,
  660.                 ^TagsCHANGES);
  661.  
  662.         TagsCHANGES[1]:=TagItem(GT_Underscore,long("_"));
  663.         TagsCHANGES[2]:=TagItem(GTIN_Number,ThisXTP.IconY);
  664.         TagsCHANGES[3].ti_Tag:=TAG_END;
  665.         NewGadgetFields:=NewGadget(172,149,52,12,"_Y",^tattr,15,PLACETEXT_LEFT,
  666.                 VI,NIL);
  667.         GadgetIconY:=CreateGadgetA(INTEGER_KIND,GadgetIconX,^NewGadgetFields,
  668.                 ^TagsCHANGES);
  669.  
  670.         TagsCHANGES[1]:=TagItem(GT_Underscore,long("_"));
  671.         TagsCHANGES[2]:=TagItem(GTCB_Checked,long(ThisXTP.Coloured));
  672.         TagsCHANGES[3].ti_Tag:=TAG_END;
  673.         NewGadgetFields:=NewGadget(10,165,0,0,"Textgadget _farbig",^tattr,16,
  674.                 PLACETEXT_RIGHT,VI,NIL);
  675.         GadgetColoured:=CreateGadgetA(CHECKBOX_KIND,GadgetIconY,^NewGadgetFields,
  676.                 ^TagsCHANGES);
  677.  
  678.         TagsCHANGES[1]:=TagItem(GT_Underscore,long("_"));
  679.         TagsCHANGES[2]:=TagItem(GTCB_Checked,long(ThisXTP.OpenProcessing));
  680.         TagsCHANGES[3].ti_Tag:=TAG_END;
  681.         NewGadgetFields:=NewGadget(200,165,0,0,"Kon_trollfeld",^tattr,17,
  682.                 PLACETEXT_RIGHT,VI,NIL);
  683.         GadgetPanel:=CreateGadgetA(CHECKBOX_KIND,GadgetColoured,^NewGadgetFields,
  684.                 ^TagsCHANGES);
  685.  
  686.         NewGadgetFields:=NewGadget(10,185,80,12,"Sichern",^tattr,18,
  687.                 PLACETEXT_IN,VI,NIL);
  688.         GadgetSave:=CreateGadgetA(BUTTON_KIND,GadgetPanel,^NewGadgetFields,
  689.                 NIL);
  690.  
  691.         NewGadgetFields:=NewGadget(138,185,100,12,"Benutzen",^tattr,19,
  692.                 PLACETEXT_IN,VI,NIL);
  693.         GadgetUse:=CreateGadgetA(BUTTON_KIND,GadgetSave,^NewGadgetFields,NIL);
  694.  
  695.         NewGadgetFields:=NewGadget(286,185,70,12,"Zurück",^tattr,20,
  696.                 PLACETEXT_IN,VI,NIL);
  697.         GadgetCancel:=CreateGadgetA(BUTTON_KIND,GadgetUse,^NewGadgetFields,NIL);
  698.  
  699.         if (ChangeASG[0]<>ChangeASG[1]) and (MyXTP.Coloured) then begin
  700.                 SI:=GadgetDiskName^.SpecialInfo;
  701.                 SI^.Extension^.ActivePens:=ChangeASG;
  702.                 SI:=GadgetFormatOptions^.SpecialInfo;
  703.                 SI^.Extension^.ActivePens:=ChangeASG;
  704.                 SI:=GadgetFormatWhere^.SpecialInfo;
  705.                 SI^.Extension^.ActivePens:=ChangeASG;
  706.                 SI:=GadgetFormatStack^.SpecialInfo;
  707.                 SI^.Extension^.ActivePens:=ChangeASG;
  708.                 SI:=GadgetTrashWhere^.SpecialInfo;
  709.                 SI^.Extension^.ActivePens:=ChangeASG;
  710.                 SI:=GadgetIconWhere^.SpecialInfo;
  711.                 SI^.Extension^.ActivePens:=ChangeASG;
  712.                 SI:=GadgetIconName^.SpecialInfo;
  713.                 SI^.Extension^.ActivePens:=ChangeASG;
  714.                 SI:=GadgetIconX^.SpecialInfo;
  715.                 SI^.Extension^.ActivePens:=ChangeASG;
  716.                 SI:=GadgetIconY^.SpecialInfo;
  717.                 SI^.Extension^.ActivePens:=ChangeASG;
  718.         end;
  719.  
  720.         NewMenuFields[1]:=NewMenu(NM_TITLE,0,"Bearbeiten",NIL,0,0,NIL);
  721.         NewMenuFields[2]:=NewMenu(NM_ITEM,0,"Standardwerte",NIL,0,0,NIL);
  722.         NewMenuFields[3]:=NewMenu(NM_ITEM,0,"letzte gesicherte Werte",NIL,0,0,NIL);
  723.         NewMenuFields[4]:=NewMenu(NM_ITEM,0,"Zurücksetzen",NIL,0,0,NIL);
  724.         NewMenuFields[5].nm_Type:=NM_END;
  725.         MenuFields:=CreateMenusA(^NewMenuFields,NIL);
  726.         TagsCHANGES[1].ti_Tag:=GTMN_TextAttr;
  727.         TagsCHANGES[1].ti_Data:=^tattr;
  728.         TagsCHANGES[2].ti_Tag:=TAG_END;
  729.         DidIt:=LayoutMenusA(MenuFields,VI,^TagsCHANGES);
  730.  
  731.         ZOM[1]:=26;
  732.         ZOM[2]:=22;
  733.         ZOM[3]:=320;
  734.         ZOM[4]:=scr^.font^.ta_Ysize+6;
  735.         TagsCHANGES[1]:=TagItem(WA_Top,22);
  736.         TagsCHANGES[2]:=TagItem(WA_Left,26);
  737.         TagsCHANGES[3]:=TagItem(WA_InnerHeight,202);
  738.         TagsCHANGES[4]:=TagItem(WA_InnerWidth,366);
  739.         TagsCHANGES[5].ti_Tag:=WA_Title;
  740.         TagsCHANGES[5].ti_Data:="XTrash 1.01 - Einstellungen";
  741.         TagsCHANGES[6]:=TagItem(WA_Flags,WFLG_CLOSEGADGET OR WFLG_GIMMEZEROZERO OR
  742.                 WFLG_ACTIVATE OR WFLG_DRAGBAR OR WFLG_SMART_REFRESH OR
  743.                 WFLG_DEPTHGADGET or WFLG_HASZOOM);
  744.         TagsCHANGES[7]:=TagItem(WA_IDCMP,IDCMP_CLOSEWINDOW or IDCMP_GADGETUP or
  745.                 IDCMP_VANILLAKEY or IDCMP_GADGETDOWN or IDCMP_MENUPICK);
  746.         TagsCHANGES[8]:=TagItem(WA_CustomScreen,long(scr));
  747.         TagsCHANGES[9]:=TagItem(WA_Gadgets,long(CG));
  748.         TagsCHANGES[10]:=TagItem(WA_MouseQueue,0);
  749.         TagsCHANGES[11]:=TagItem(WA_RptQueue,0);
  750.         TagsCHANGES[12].ti_Tag:=WA_Zoom;
  751.         TagsCHANGES[12].ti_Data:=ZOM;
  752.         TagsCHANGES[13].ti_Tag:=TAG_END;
  753.         win:=OpenWindowTagList(NIL,^TagsCHANGES);
  754.         winBit:=long(1) shl win^.userport^.mp_SigBit;
  755.  
  756.         DidIt:=SetMenuStrip(win,MenuFields);
  757.         GT_RefreshWindow(win,NIL);
  758.  
  759.         BACK:
  760.         MyEndExit:=-1;
  761.  
  762.         REPEAT
  763.                 imsg:=GT_GetIMsg(win^.userport);
  764.                 GT_ReplyIMsg(imsg);
  765.                 if imsg=NIL then begin
  766.                         SIGNALS:=_wait(AppBit or winBit);
  767.                         if SIGNALS=winBit then begin
  768.                                 imsg:=GT_GetIMsg(win^.userport);
  769.                                 GT_ReplyIMsg(imsg)
  770.                         end
  771.                 end else
  772.                         SIGNALS:=winBit;
  773.                 if SIGNALS=winBit then begin
  774.                         case imsg^.class of
  775.                                 IDCMP_CLOSEWINDOW:
  776.                                         MyEndExit:=0
  777.                                 IDCMP_VANILLAKEY: begin
  778.                                         if (imsg^.code=80) or (imsg^.code=220) or (imsg^.code=73) then begin
  779.                                                 case imsg^.code of
  780.                                                         80:     SI:=GadgetFormatWhere^.SpecialInfo;
  781.                                                         220:    SI:=GadgetTrashWhere^.SpecialInfo;
  782.                                                         73:     SI:=GadgetIconWhere^.SpecialInfo
  783.                                                 end;
  784.                                                 VariableString:=SI^.Buffer;
  785.                                                 if (imsg^.code=80) and (pos(" ",VariableString)<>0) then VariableString:=copy(VariableString,1,pos(" ",VariableString)-1);
  786.                                                 WaitPointer(win);
  787.                                                 GetRidOfForPreferencesXTrash(win);
  788.                                                 if PopUpFiler(1+integer(imsg^.code<>220),imsg^.code<>73,win) then begin
  789.                                                         GetBackForPreferencesXTrash(win,CG);
  790.                                                         NormalPointer(win);
  791.                                                         TagsCHANGES[1].ti_Tag:=GTST_String; TagsCHANGES[1].ti_Data:=VariableString; TagsCHANGES[2].ti_Tag:=TAG_END;
  792.                                                         case imsg^.code of
  793.                                                                 80:     GT_SetGadgetAttrsA(GadgetFormatWhere,win,NIL,^TagsCHANGES)
  794.                                                                 220:    GT_SetGadgetAttrsA(GadgetTrashWhere,win,NIL,^TagsCHANGES)
  795.                                                                 73:     GT_SetGadgetAttrsA(GadgetIconWhere,win,NIL,^TagsCHANGES)
  796.                                                         end
  797.                                                 end else begin GetBackForPreferencesXTrash(win,CG); NormalPointer(win) end;
  798.                                                 goto BACK
  799.                                         end;
  800.                                         if imsg^.code=252 then DidIt:=activategadget(GadgetTrashWhere,win,nil);
  801.                                         if imsg^.code>96 then imsg^.code:=imsg^.code-32;
  802.                                         case imsg^.code of
  803.                                                 13:     MyEndExit:=1
  804.                                                 27:     MyEndExit:=0
  805.                                                 32:     MyEndExit:=2
  806.                                                 78:     DidIt:=activategadget(GadgetDiskName,win,nil)
  807.                                                 79:     DidIt:=activategadget(GadgetFormatOptions,win,nil)
  808.                                                 80:     DidIt:=activategadget(GadgetFormatWhere,win,nil)
  809.                                                 83:     DidIt:=activategadget(GadgetFormatStack,win,nil)
  810.                                                 73:     DidIt:=activategadget(GadgetIconWhere,win,nil)
  811.                                                 65:     DidIt:=activategadget(GadgetIconName,win,nil)
  812.                                                 88:     DidIt:=activategadget(GadgetIconX,win,nil)
  813.                                                 89:     DidIt:=activategadget(GadgetIconY,win,nil)
  814.                                                 70:     begin
  815.                                                         ThisXTP.Coloured:=NOT(ThisXTP.Coloured);
  816.                                                         TagsCHANGES[1]:=TagItem(GTCB_Checked,long(ThisXTP.Coloured)); TagsCHANGES[2].ti_Tag:=TAG_END;
  817.                                                         GT_SetGadgetAttrsA(GadgetColoured,win,NIL,^TagsCHANGES)
  818.                                                 end
  819.                                                 84:     begin
  820.                                                         ThisXTP.OpenProcessing:=NOT(ThisXTP.OpenProcessing);
  821.                                                         TagsCHANGES[1]:=TagItem(GTCB_Checked,long(ThisXTP.OpenProcessing)); TagsCHANGES[2].ti_Tag:=TAG_END;
  822.                                                         GT_SetGadgetAttrsA(GadgetPanel,win,NIL,^TagsCHANGES)
  823.                                                 end
  824.                                                 68:     begin
  825.                                                         TagsCHANGES[1]:=TagItem(GTMX_Active,0); TagsCHANGES[2].ti_Tag:=TAG_END;
  826.                                                         ThisXTP.MoveFiles:=FALSE;
  827.                                                         GT_SetGadgetAttrsA(GadgetMethodFiles,win,NIL,^TagsCHANGES)
  828.                                                 end
  829.                                                 66:     begin
  830.                                                         TagsCHANGES[1]:=TagItem(GTMX_Active,1); TagsCHANGES[2].ti_Tag:=TAG_END;
  831.                                                         ThisXTP.MoveFiles:=TRUE;
  832.                                                         GT_SetGadgetAttrsA(GadgetMethodFiles,win,NIL,^TagsCHANGES)
  833.                                                 end
  834.                                                 76:     begin
  835.                                                         TagsCHANGES[1]:=TagItem(GTMX_Active,0); TagsCHANGES[2].ti_Tag:=TAG_END;
  836.                                                         ThisXTP.DeleteTrash:=FALSE;
  837.                                                         GT_SetGadgetAttrsA(GadgetMethodTrash,win,NIL,^TagsCHANGES)
  838.                                                 end
  839.                                                 77:     begin
  840.                                                         TagsCHANGES[1]:=TagItem(GTMX_Active,1); TagsCHANGES[2].ti_Tag:=TAG_END;
  841.                                                         ThisXTP.DeleteTrash:=TRUE;
  842.                                                         GT_SetGadgetAttrsA(GadgetMethodTrash,win,NIL,^TagsCHANGES)
  843.                                                 end
  844.                                                 87:     begin
  845.                                                         TagsCHANGES[1]:=TagItem(GTMX_Active,long(CurrentMethodFiles)); TagsCHANGES[2].ti_Tag:=TAG_END;
  846.                                                         GT_SetGadgetAttrsA(GadgetMethodFiles,win,NIL,^TagsCHANGES);
  847.                                                         TagsCHANGES[1]:=TagItem(GTMX_Active,long(CurrentMethodTrash)); TagsCHANGES[2].ti_Tag:=TAG_END;
  848.                                                         GT_SetGadgetAttrsA(GadgetMethodTrash,win,NIL,^TagsCHANGES);
  849.                                                         TagsCHANGES[1].ti_Tag:=GTST_String; TagsCHANGES[1].ti_Data:=CurrentDiskName; TagsCHANGES[2].ti_Tag:=TAG_END;
  850.                                                         GT_SetGadgetAttrsA(GadgetDiskName,win,NIL,^TagsCHANGES);
  851.                                                         TagsCHANGES[1].ti_Tag:=GTST_String; TagsCHANGES[1].ti_Data:=CurrentFormatOptions; TagsCHANGES[2].ti_Tag:=TAG_END;
  852.                                                         GT_SetGadgetAttrsA(GadgetFormatOptions,win,NIL,^TagsCHANGES)
  853.                                                 end
  854.                                                 else
  855.                                         end
  856.                                 end
  857.                                 IDCMP_GADGETUP: begin
  858.                                         CurrentGadget:=imsg^.iaddress;
  859.                                         if (CurrentGadget^.gadgetid=7) or (CurrentGadget^.gadgetid=10) or (CurrentGadget^.gadgetid=12) then begin
  860.                                                 case CurrentGadget^.gadgetid of
  861.                                                         7:      SI:=GadgetFormatWhere^.SpecialInfo;
  862.                                                         10:     SI:=GadgetTrashWhere^.SpecialInfo;
  863.                                                         12:     SI:=GadgetIconWhere^.SpecialInfo
  864.                                                 end;
  865.                                                 VariableString:=SI^.Buffer;
  866.                                                 if (CurrentGadget^.gadgetid=7) and (pos(" ",VariableString)<>0) then VariableString:=copy(VariableString,1,pos(" ",VariableString)-1);
  867.                                                 WaitPointer(win);
  868.                                                 GetRidOfForPreferencesXTrash(win);
  869.                                                 if PopUpFiler(1+integer(CurrentGadget^.gadgetid<>10),CurrentGadget^.gadgetid<>12,win) then begin
  870.                                                         GetBackForPreferencesXTrash(win,CG);
  871.                                                         NormalPointer(win);
  872.                                                         TagsCHANGES[1].ti_Tag:=GTST_String; TagsCHANGES[1].ti_Data:=VariableString; TagsCHANGES[2].ti_Tag:=TAG_END;
  873.                                                         case CurrentGadget^.gadgetid of
  874.                                                                 7:      GT_SetGadgetAttrsA(GadgetFormatWhere,win,NIL,^TagsCHANGES)
  875.                                                                 10:     GT_SetGadgetAttrsA(GadgetTrashWhere,win,NIL,^TagsCHANGES)
  876.                                                                 12:     GT_SetGadgetAttrsA(GadgetIconWhere,win,NIL,^TagsCHANGES)
  877.                                                         end
  878.                                                 end else begin GetBackForPreferencesXTrash(win,CG); NormalPointer(win) end;
  879.                                                 goto BACK
  880.                                         end;
  881.                                         case CurrentGadget^.gadgetid of
  882.                                                 1:      begin
  883.                                                         TagsCHANGES[1]:=TagItem(GTMX_Active,long(CurrentMethodFiles)); TagsCHANGES[2].ti_Tag:=TAG_END;
  884.                                                         GT_SetGadgetAttrsA(GadgetMethodFiles,win,NIL,^TagsCHANGES);
  885.                                                         TagsCHANGES[1]:=TagItem(GTMX_Active,long(CurrentMethodTrash)); TagsCHANGES[2].ti_Tag:=TAG_END;
  886.                                                         GT_SetGadgetAttrsA(GadgetMethodTrash,win,NIL,^TagsCHANGES);
  887.                                                         TagsCHANGES[1].ti_Tag:=GTST_String; TagsCHANGES[1].ti_Data:=CurrentDiskName; TagsCHANGES[2].ti_Tag:=TAG_END;
  888.                                                         GT_SetGadgetAttrsA(GadgetDiskName,win,NIL,^TagsCHANGES);
  889.                                                         TagsCHANGES[1].ti_Tag:=GTST_String; TagsCHANGES[1].ti_Data:=CurrentFormatOptions; TagsCHANGES[2].ti_Tag:=TAG_END;
  890.                                                         GT_SetGadgetAttrsA(GadgetFormatOptions,win,NIL,^TagsCHANGES)
  891.                                                 end
  892.                                                 9:      begin
  893.                                                         SI:=GadgetTrashWhere^.SpecialInfo;
  894.                                                         ThisXTP.Trasher:=SI^.Buffer;
  895.                                                         if ThisXTP.Trasher="" then begin
  896.                                                                 ThisXTP.Trasher:="RAM:";
  897.                                                                 TagsCHANGES[1].ti_Tag:=GTST_String; TagsCHANGES[1].ti_Data:=ThisXTP.Trasher; TagsCHANGES[2].ti_Tag:=TAG_END;
  898.                                                                 GT_SetGadgetAttrsA(GadgetTrashWhere,win,NIL,^TagsCHANGES)
  899.                                                         end
  900.                                                 end
  901.                                                 16:     ThisXTP.Coloured:=NOT(ThisXTP.Coloured)
  902.                                                 17:     ThisXTP.OpenProcessing:=NOT(ThisXTP.OpenProcessing)
  903.                                                 18:     MyEndExit:=2
  904.                                                 19:     MyEndExit:=1
  905.                                                 20:     MyEndExit:=0
  906.                                                 else
  907.                                         end
  908.                                 end
  909.                                 IDCMP_GADGETDOWN: begin
  910.                                         CurrentGadget:=imsg^.iaddress;
  911.                                         case CurrentGadget^.gadgetid of
  912.                                                 2:      ThisXTP.MoveFiles:=boolean(imsg^.code)
  913.                                                 3:      ThisXTP.DeleteTrash:=boolean(imsg^.code)
  914.                                                 else
  915.                                         end
  916.                                 end
  917.                                 IDCMP_MENUPICK: begin
  918.                                         ChosenMenu:=imsg^.code;
  919.                                         while NOT ((ChosenMenu=MENUNULL) or (ChosenMenu=$F8)) do begin
  920.                                                 case ChosenMenu and $1f of
  921.                                                         0:      begin
  922.                                                                 case (ChosenMenu and $7e0) div 32 of
  923.                                                                         0:      begin
  924.                                                                                 ThisXTP:=XTrashPreferences("","",-1,-1,TRUE,FALSE,"RAM:",FALSE,FALSE,"Empty","",'SYS:System/Format DRIVE \d NAME "\n" \o',-1);
  925.                                                                                 RestoreXTP(^ThisXTP,GadgetMethodFiles,GadgetMethodTrash,GadgetDiskName,GadgetFormatOptions,GadgetFormatWhere,GadgetFormatStack,GadgetTrashWhere,GadgetIconWhere,
  926.                                                                                         GadgetIconName,GadgetIconX,GadgetIconY,GadgetColoured,GadgetPanel,win)
  927.                                                                         end
  928.                                                                         1:      begin
  929.                                                                                 ThisXTP:=StartXTP;
  930.                                                                                 RestoreXTP(^ThisXTP,GadgetMethodFiles,GadgetMethodTrash,GadgetDiskName,GadgetFormatOptions,GadgetFormatWhere,GadgetFormatStack,GadgetTrashWhere,GadgetIconWhere,
  931.                                                                                         GadgetIconName,GadgetIconX,GadgetIconY,GadgetColoured,GadgetPanel,win)
  932.                                                                         end
  933.                                                                         2:      begin
  934.                                                                                 ThisXTP:=MyXTP;
  935.                                                                                 RestoreXTP(^ThisXTP,GadgetMethodFiles,GadgetMethodTrash,GadgetDiskName,GadgetFormatOptions,GadgetFormatWhere,GadgetFormatStack,GadgetTrashWhere,GadgetIconWhere,
  936.                                                                                         GadgetIconName,GadgetIconX,GadgetIconY,GadgetColoured,GadgetPanel,win)
  937.                                                                         end
  938.                                                                         else
  939.                                                                 end
  940.                                                         end
  941.                                                         else
  942.                                                 end;
  943.                                                 NItem:=ItemAddress(MenuFields,ChosenMenu);
  944.                                                 ChosenMenu:=NItem^.nextselect;
  945.                                         end
  946.                                 end
  947.                                 else
  948.                         end
  949.                 end;
  950.                 if SIGNALS=AppBit then begin
  951.                         ApplicationMessage:=p_AppMessage(GetMsg(ApplicationPort));
  952.                         if ApplicationMessage=NIL then goto BACK;
  953.                         ReplyMsg(p_Message(ApplicationMessage));
  954.                         WindowToFront(win)
  955.                 end
  956.         UNTIL MyEndExit<>-1;
  957.  
  958.         WaitPointer(win);
  959.  
  960.         SI:=GadgetDiskName^.SpecialInfo;
  961.         ThisXTP.DiskName:=SI^.Buffer;
  962.         SI:=GadgetFormatOptions^.SpecialInfo;
  963.         ThisXTP.FormatOptions:=SI^.Buffer;
  964.         SI:=GadgetFormatWhere^.SpecialInfo;
  965.         ThisXTP.Formatter:=SI^.Buffer;
  966.         SI:=GadgetFormatStack^.SpecialInfo;
  967.         ThisXTP.FormatStack:=SI^.LongInt;
  968.         SI:=GadgetTrashWhere^.SpecialInfo;
  969.         ThisXTP.Trasher:=SI^.Buffer;
  970.         SI:=GadgetIconWhere^.SpecialInfo;
  971.         ThisXTP.IconFile:=SI^.Buffer;
  972.         SI:=GadgetIconName^.SpecialInfo;
  973.         ThisXTP.IconName:=SI^.Buffer;
  974.         SI:=GadgetIconX^.SpecialInfo;
  975.         ThisXTP.IconX:=SI^.LongInt;
  976.         SI:=GadgetIconY^.SpecialInfo;
  977.         ThisXTP.IconY:=SI^.LongInt;
  978.  
  979.         if MyEndExit=2 then begin
  980.                 if WriteXTrashPrefs(TheConfiguration,ThisXTP,win)=FALSE then begin NormalPointer(win); goto BACK end;
  981.                 StartXTP:=ThisXTP
  982.         end;
  983.         if MyEndExit<>0 then begin
  984.                 DidIt:=(MyXTP.IconName<>ThisXTP.IconName) or (MyXTP.IconFile<>ThisXTP.IconFile) or (MyXTP.IconX<>ThisXTP.IconX) or (MyXTP.IconY<>ThisXTP.IconY);
  985.                 MyXTP:=ThisXTP;
  986.                 if DidIt then begin
  987.                         DidIt:=RemoveAppIcon(ApplicationIcon);
  988.                         if diskIcon=FALSE then begin
  989.                                 FreeVec(ImageDataNorm);
  990.                                 FreeVec(ImageDataSel);
  991.                                 dispose(ImagesObject)
  992.                         end else
  993.                                 FreeDiskObject(ImagesObject);
  994.                         InitAppIcon
  995.                 end;
  996.         end;
  997.  
  998.         ClearMenuStrip(win);
  999.         CloseWindow(win);
  1000.         FreeGadgets(CG);
  1001.         FreeMenus(MenuFields);
  1002. END;
  1003.  
  1004.  
  1005. FUNCTION SetFormatString(Source,DiskDrive,DiskName,FormatOptions:str):DirNameString;
  1006. VAR     i       :                               integer;
  1007.         Josh    :                               DirNameString;
  1008. BEGIN
  1009.         Josh:=" "+Source+" ";
  1010.  
  1011.         while pos("\\",Josh)<>0 do begin
  1012.                 i:=pos("\\",Josh);
  1013.                 Josh:=copy(Josh,1,i-1)+LF+copy(Josh,i+2,length(Josh)-i-1)
  1014.         end;
  1015.         while pos("\d",Josh)<>0 do begin
  1016.                 i:=pos("\d",Josh);
  1017.                 Josh:=copy(Josh,1,i-1)+DISKDRIVE+copy(Josh,i+2,length(Josh)-i-1)
  1018.         end;
  1019.         while pos("\n",Josh)<>0 do begin
  1020.                 i:=pos("\n",Josh);
  1021.                 Josh:=copy(Josh,1,i-1)+DISKNAME+copy(Josh,i+2,length(Josh)-i-1)
  1022.         end;
  1023.         while pos("\o",Josh)<>0 do begin
  1024.                 i:=pos("\o",Josh);
  1025.                 Josh:=copy(Josh,1,i-1)+FORMATOPTIONS+copy(Josh,i+2,length(Josh)-i-1)
  1026.         end;
  1027.         while pos(LF,Josh)<>0 do begin
  1028.                 i:=pos(LF,Josh);
  1029.                 Josh:=copy(Josh,1,i-1)+"\"+copy(Josh,i+1,length(Josh)-i-1)
  1030.         end;
  1031.  
  1032.         Josh:=copy(Josh,2,length(Josh)-2);
  1033.         SetFormatString:=Josh
  1034. END;
  1035.  
  1036. FUNCTION GetDevice(Source:str,DoingString:str,win:p_window):FileString;
  1037. LABEL   OuterSpace,BackToTheRoots,BackToTheParents;
  1038. TYPE    p_Byte = ^Byte;
  1039.         p_Char = ^Char;
  1040. VAR     RN      :                               p_RootNode;
  1041.         Inf     :                               p_DosInfo;
  1042.         Lst     :                               p_DevInfo;
  1043.         MyString:                               FileString;
  1044.         MyProcess:                              p_Process;
  1045.         MyPtr   :                               PTR;
  1046.         MyLock,OtherLock:                       BPTR;
  1047.         Operating:                              boolean;
  1048.         dummy   :                               long;
  1049.         tac     :                               p_Byte;
  1050.         tacker  :                               p_Char;
  1051. BEGIN
  1052.         BackToTheRoots:
  1053.         Operating:=FALSE;
  1054.         forbid;
  1055.         MyProcess:=p_Process(FindTask(NIL));
  1056.         MyPtr:=MyProcess^.pr_WindowPtr;
  1057.         MyProcess^.pr_WindowPtr:=ptr(-1);
  1058.         RN:=DB^.dl_Root;
  1059.         Inf:=p_DosInfo(long(RN^.rn_Info) SHL 2);
  1060.         BackToTheParents:
  1061.         Lst:=p_DevInfo(long(Inf^.di_DevInfo) SHL 2);
  1062.         repeat
  1063.                 if (Lst^.dvi_Type=0) and (Lst^.dvi_GlobVec=0) then begin
  1064.                         tac:=p_Byte(Lst^.dvi_Name SHL 2);
  1065.                         for dummy:=1 to tac^ do begin
  1066.                                 tacker:=p_Char(Lst^.dvi_Name SHL 2+dummy);
  1067.                                 MyString[dummy]:=tacker^
  1068.                         end;
  1069.                         MyString[tac^+1]:=":";
  1070.                         MyString[tac^+2]:=chr(0);
  1071.                         if Operating then begin
  1072.                                 OtherLock:=Lock(MyString,SHARED_LOCK);
  1073.                                 if IOErr=0 then begin
  1074.                                         if SameDevice(OtherLock,MyLock) then begin UnLock(OtherLock); goto OuterSpace end else UnLock(OtherLock);
  1075.                                 end
  1076.                         end else if MyString=Source then goto OuterSpace;
  1077.                 end;
  1078.                 Lst:=p_DevInfo(long(Lst^.dvi_Next) SHL 2)
  1079.         until ptr(long(Lst) SHL 2)=NIL;
  1080.         if Operating=FALSE then begin MyLock:=Lock(Source,SHARED_LOCK); if IOErr=0 then begin Operating:=TRUE; goto BackToTheParents end end;
  1081.         if Operating then UnLock(MyLock);
  1082.         MyProcess^.pr_WindowPtr:=MyPtr;
  1083.         permit;
  1084.         dummy:=GiveQuestion("XTrash 1.01 - "+DoingString,"Das Gerät/Laufwerk [des Datenträgers]"+LF+Source+LF+"konnte nicht erkannt werden.","Nochmal versuchen|Löschort verlassen",win);
  1085.         if dummy=0 then GetDevice:="" else goto BackToTheRoots;
  1086.         EXIT;
  1087.  
  1088.         OuterSpace:
  1089.         if Operating then begin UnLock(MyLock); MyLock:=0 end;
  1090.         MyProcess^.pr_WindowPtr:=MyPtr;
  1091.         permit;
  1092.         GetDevice:=MyString;
  1093. END;
  1094.  
  1095. FUNCTION CopyEntry(MySource:str,MyDest:DirNameString,DoingString:str,copyIcon:boolean,
  1096.         VAR replace:boolean,win:p_window):long;
  1097. LABEL   tryAgain;
  1098. VAR     OUTOF,INTO:                             file of long;
  1099.         MyLong  :                               long;
  1100.         MyLock  :                               BPTR;
  1101.         MyIcon  :                               p_DiskObject;
  1102. BEGIN
  1103.         myLong:=long(AddPart(MyDest,FilePart(MySource),364));
  1104.         tryAgain:
  1105.         if replace=FALSE then begin
  1106.                 if copyIcon then VariableString:=MyDest+".info" else VariableString:=MyDest;
  1107.                 MyLock:=Lock(VariableString,SHARED_LOCK);
  1108.                 if MyLock<>0 then begin
  1109.                         UnLock(MyLock);
  1110.                         MyLong:=GiveQuestion("XTrash 1.01 - "+DoingString,"Die Datei"+LF+VariableString+LF+"existiert bereits.","Nochmal|Ersetzen|als Fehler betrachten",win);
  1111.                         case MyLong of
  1112.                                 0:      begin CopyEntry:=203; Exit end
  1113.                                 1:      goto tryAgain
  1114.                                 else    replace:=TRUE
  1115.                         end
  1116.                 end else begin UnLock(MyLock); replace:=FALSE end
  1117.         end;
  1118.         if copyIcon then begin
  1119.                 MyIcon:=GetDiskObjectNew(MySource);
  1120.                 if MyIcon=NIL then
  1121.                         myLong:=IOErr
  1122.                 else begin
  1123.                         if PutDiskObject(MyDest,MyIcon)=FALSE then myLong:=IOErr else myLong:=0;
  1124.                         FreeDiskObject(MyIcon)
  1125.                 end;
  1126.                 if myLong<>0 then begin
  1127.                         CopyEntry:=myLong;
  1128.                         if myLong<>ERROR_OBJECT_NOT_FOUND then begin
  1129.                                 myLong:=long(Fault(myLong,NIL,VariableString,364));
  1130.                                 GiveError("XTrash 1.01 - "+DoingString,"Das Piktogramm"+LF+MySource+LF+"konnte nicht kopiert werden."+LF+"("+VariableString+")",win);
  1131.                                 close(OUTOF);
  1132.                         end;
  1133.                 end;
  1134.                 CopyEntry:=myLong;
  1135.         end else begin
  1136.                 reSet(OUTOF,MySource);
  1137.                 myLong:=IOResult;
  1138.                 if myLong<>0 then begin
  1139.                         CopyEntry:=myLong;
  1140.                         if myLong<>ERROR_OBJECT_NOT_FOUND then begin
  1141.                                 myLong:=long(Fault(myLong,NIL,VariableString,364));
  1142.                                 GiveError("XTrash 1.01 - "+DoingString,"Die Datei"+LF+MySource+LF+"konnte nicht kopiert werden."+LF+"("+VariableString+")",win);
  1143.                         end;
  1144.                         Exit
  1145.                 end;
  1146.                 reWrite(INTO,MyDest);
  1147.                 myLong:=IOResult;
  1148.                 if myLong<>0 then begin
  1149.                         CopyEntry:=myLong;
  1150.                         if myLong<>ERROR_OBJECT_NOT_FOUND then begin
  1151.                                 myLong:=long(Fault(myLong,NIL,VariableString,364));
  1152.                                 GiveError("XTrash 1.01 - "+DoingString,"Die Datei"+LF+MyDest+LF+"konnte nicht erstellt werden."+LF+"("+VariableString+")",win);
  1153.                                 close(OUTOF);
  1154.                         end;
  1155.                         Exit
  1156.                 end;
  1157.                 Buffer(OUTOF,10000);
  1158.                 Buffer(INTO,10000);
  1159.                 while EOF(OUTOF)=FALSE do begin
  1160.                         read(OUTOF,myLong);
  1161.                         write(INTO,myLong);
  1162.                         myLong:=IOResult;
  1163.                         if myLong<>0 then begin
  1164.                                 CopyEntry:=myLong;
  1165.                                 if myLong<>ERROR_OBJECT_NOT_FOUND then begin
  1166.                                         myLong:=long(Fault(myLong,NIL,VariableString,364));
  1167.                                         GiveError("XTrash 1.01 - "+DoingString,"Die Datei"+LF+MySource+LF+"konnte nicht kopiert werden."+LF+"("+VariableString+")",win);
  1168.                                         close(OUTOF);
  1169.                                         close(INTO)
  1170.                                 end;
  1171.                                 Exit
  1172.                         end
  1173.                 end;
  1174.                 CopyEntry:=0;
  1175.                 close(OUTOF);
  1176.                 close(INTO)
  1177.         end
  1178. END;
  1179.  
  1180. FUNCTION TrashEntry(WhichFile:Str,DoingString:str,trashIcon:boolean,
  1181.         chopNotFound,chopDir:boolean,win:p_window):long;
  1182. VAR     dummy,D2:                               long;
  1183.         mine    :                               string[20];
  1184. BEGIN
  1185.         if chopDir then mine:="Das Verzeichnis" else mine:="Die Datei";
  1186.         if trashIcon then dummy:=long(DeleteDiskObject(WhichFile)) else dummy:=long(DeleteFile(WhichFile)=DOSTRUE);
  1187.         if dummy=long(FALSE) then begin
  1188.                 dummy:=IOErr;
  1189.                 if (dummy<>ERROR_OBJECT_NOT_FOUND) or (chopNotFound) then begin
  1190.                         D2:=long(Fault(Dummy,NIL,VariableString,364));
  1191.                         if trashIcon then
  1192.                                 GiveError("XTrash 1.01 - "+DoingString,"Das Piktogramm"+LF+WhichFile+".info"+LF+"konnte nicht gelöscht werden."+LF+"("+VariableString+")",win)
  1193.                         else
  1194.                                 GiveError("XTrash 1.01 - "+DoingString,mine+LF+WhichFile+LF+"konnte nicht gelöscht werden."+LF+"("+VariableString+")",win)
  1195.                 end;
  1196.                 TrashEntry:=dummy;
  1197.         end else TrashEntry:=0
  1198. END;
  1199.  
  1200.  
  1201. PROCEDURE GetRidOfForXTrash(VAR win:p_window);
  1202. VAR     DidIt   :                               boolean;
  1203. BEGIN
  1204.         DidIt:=ModifyIDCMP(win,0);
  1205.         win^.firstgadget^.nextgadget^.nextgadget^.nextgadget:=NIL
  1206. END;
  1207.  
  1208. PROCEDURE GetBackForXTrash(VAR win:p_window,GadgetCycle:p_gadget);
  1209. VAR     DidIt   :                               boolean;
  1210. BEGIN
  1211.         win^.firstgadget^.nextgadget^.nextgadget^.nextgadget:=GadgetCycle;
  1212.         DidIt:=ModifyIDCMP(win,IDCMP_CLOSEWINDOW or IDCMP_GADGETUP or IDCMP_GADGETDOWN or IDCMP_VANILLAKEY or IDCMP_MOUSEMOVE or IDCMP_MOUSEBUTTONS or IDCMP_INTUITICKS);
  1213.         RefreshGadgets(win^.FirstGadget,win,NIL);
  1214.         GT_RefreshWindow(win,NIL);
  1215. END;
  1216.  
  1217. PROCEDURE XTrash;
  1218. LABEL   Overjump,ComeBack1,ComeBack2,ComeBack3,ComeBack4,ComeBack5,FileFailed,
  1219.         FileFailed2,Stick,Stick2,FoundAnError,CureAnError,redoFile,
  1220.         AlternateFileFailed,LookWhatExitTrash,BACK,ExitTheTrash;
  1221. VAR     win     :                               p_window;
  1222.         windowDisplaying:                       boolean;
  1223.         winBit  :                               long;
  1224.         TagsCHANGES:                            array[1..13] of TagItem;
  1225.         CG      :                               p_gadget;
  1226.         CurrentGadget:                          p_gadget;
  1227.         GadgetDoing:                            p_gadget;
  1228.         GadgetPathList:                         p_gadget;
  1229.         GadgetPause:                            p_gadget;
  1230.         GadgetStop:                             p_gadget;
  1231.         NewGadgetFields:                        newgadget;
  1232.         imsg    :                               p_intuimessage;
  1233.         SIGNALS :                               long;
  1234.         MyEndExit:                              integer;
  1235.         ExitTrashing:                           integer;
  1236.         ComeBack:                               integer;
  1237.         DisplayNode,DisplayNodeBack:            p_StringNode;
  1238.         DisplayList:                            p_List;
  1239.         dispLayer:                              integer;
  1240.         MyString:                               DirNameString;
  1241.         DoingString:                            String[25];
  1242.         dummy   :                               long;
  1243.         alreadyNotFound:                        boolean;
  1244.         AnchorList:                             p_List;
  1245.         AnchorNodeV:                            p_AnchorNode;
  1246.         layer   :                               integer;
  1247.         MyAnchor:                               p_AnchorPath;
  1248.         CurrentLock:                            BPTR;
  1249.         OldLock :                               BPTR;
  1250.         DidIt   :                               boolean;
  1251.         ApplicationMessage:                     p_AppMessage;
  1252.         Pause   :                               boolean;
  1253.         replace :                               boolean;
  1254.         myTail  :                               p_Node;
  1255. BEGIN
  1256.         New(DisplayList);
  1257.         InitList(DisplayList);
  1258.         new(AnchorList);
  1259.         InitList(AnchorList);
  1260.  
  1261.         Pause:=FALSE;
  1262.         opLayer:=0;
  1263.         dispLayer:=0;
  1264.         DoingString:="";
  1265.  
  1266.         if MyXTP.OpenProcessing then begin ComeBack:=1; MyEndExit:=35; goto Overjump end else begin win:=NIL; windowDisplaying:=FALSE end;
  1267.         ComeBack1:
  1268.  
  1269.         opLayer:=opLayer+1;
  1270.  
  1271.         CASE opLayer of
  1272.                 1:      begin TrashNode:=p_PathNode(FileList^.lh_Head); if CurrentMethodFiles then DoingString:="Bewege Datei(en)" else DoingString:="Lösche Datei(en)" end
  1273.                 2:      begin TrashNode:=p_PathNode(DirList^.lh_Head); DoingString:="Lösche Verzeichnis(se)" end
  1274.                 3:      begin TrashNode:=p_PathNode(TrashList^.lh_Head); if CurrentMethodTrash then DoingString:="Lösche Mülleimer" else DoingString:="Leere Mülleimer" end
  1275.                 4:      begin TrashNode:=p_PathNode(DiskList^.lh_Head); DoingString:="Formatiere Datenträger" end
  1276.         end;
  1277.         if (p_PathNode(TrashNode^.pn_Node.ln_Succ)<>NIL) and (windowDisplaying) then begin
  1278.                 TagsCHANGES[1].ti_Tag:=GTTX_Text;
  1279.                 TagsCHANGES[1].ti_Data:=DoingString;
  1280.                 TagsCHANGES[2].ti_Tag:=TAG_END;
  1281.                 GT_SetGadgetAttrsA(GadgetDoing,win,NIL,^TagsCHANGES)
  1282.         end;
  1283.         WHILE p_PathNode(TrashNode^.pn_Node.ln_Succ)<>NIL DO BEGIN
  1284.                 dispLayer:=1;
  1285.                 ExitTrashing:=0;
  1286.                 VariableString:=TrashNode^.pn_Path;
  1287.                 while VariableString[length(VariableString)]<>":" do begin
  1288.                         New(DisplayNode);
  1289.                         MyString:=FilePart(VariableString);
  1290.                         DisplayNode^.stn_Node.ln_pri:=0;
  1291.                         PrepareNode(DisplayNode,MyString);
  1292.                         AddHead(DisplayList,p_Node(DisplayNode));
  1293.                         VariableString:=copy(VariableString,1,length(VariableString)-length(PathPart(VariableString)));
  1294.                         dispLayer:=dispLayer+1
  1295.                 end;
  1296.                 New(DisplayNode);
  1297.                 DisplayNode^.stn_Node.ln_pri:=0;
  1298.                 PrepareNode(DisplayNode,VariableString);
  1299.                 AddHead(DisplayList,p_Node(DisplayNode));
  1300.                 if windowDisplaying then begin
  1301.                         TagsCHANGES[1].ti_Tag:=GTLV_Labels;
  1302.                         TagsCHANGES[1].ti_Data:=long(DisplayList);
  1303.                         if dispLayer<10 then TagsCHANGES[2].ti_Tag:=TAG_END else begin TagsCHANGES[2].ti_Tag:=GTLV_Top; TagsCHANGES[2].ti_Data:=dispLayer-8; TagsCHANGES[3].ti_Tag:=TAG_END end;
  1304.                         GT_SetGadgetAttrsA(GadgetPathList,win,NIL,^TagsCHANGES);
  1305.                 end;
  1306.                 ComeBack2:
  1307.                 ApplicationMessage:=p_AppMessage(GetMsg(ApplicationPort));
  1308.                 if ApplicationMessage<>NIL then begin
  1309.                         ReplyMsg(p_Message(ApplicationMessage));
  1310.                         if windowDisplaying then WindowToFront(win) else begin ComeBack:=2; MyEndExit:=35; goto Overjump end;
  1311.                 end;
  1312.                 if windowDisplaying then begin
  1313.                         imsg:=GT_GetIMsg(win^.userport); GT_ReplyIMsg(imsg);
  1314.                         if (imsg<>NIL) and (imsg^.class<>IDCMP_INTUITICKS) then begin ComeBack:=2; goto BACK end;
  1315.                         if ExitTrashing>0 then goto LookWhatExitTrash;
  1316.                 end;
  1317.                 if Pause then begin SIGNALS:=_Wait(winBit or AppBit); goto ComeBack2 end;
  1318.                 if (opLayer=2) or (opLayer=3) then begin
  1319.                         layer:=0;
  1320.                         Stick:
  1321.                         layer:=layer+1;
  1322.                         CurrentLock:=Lock(TrashNode^.pn_Path,SHARED_LOCK);
  1323.                         dummy:=IOErr;
  1324.                         if dummy=0 then begin
  1325.                                 new(MyAnchor);
  1326.                                 OldLock:=CurrentDir(CurrentLock);
  1327.                                 dummy:=MatchFirst("#?",MyAnchor);
  1328.                                 if dummy<>0 then goto FoundAnError;
  1329.                                 repeat
  1330.                                         ComeBack3:
  1331.                                         ApplicationMessage:=p_AppMessage(GetMsg(ApplicationPort));
  1332.                                         if ApplicationMessage<>NIL then begin
  1333.                                                 ReplyMsg(p_Message(ApplicationMessage));
  1334.                                                 if windowDisplaying then WindowToFront(win) else begin ComeBack:=3; MyEndExit:=35; goto Overjump end;
  1335.                                         end;
  1336.                                         if windowDisplaying then begin
  1337.                                                 imsg:=GT_GetIMsg(win^.userport); GT_ReplyIMsg(imsg);
  1338.                                                 if (imsg<>NIL) and (imsg^.class<>IDCMP_INTUITICKS) then begin ComeBack:=3; goto BACK end;
  1339.                                                 if ExitTrashing>0 then goto CureAnError;
  1340.                                         end;
  1341.                                         if Pause then begin SIGNALS:=_Wait(winBit or AppBit); goto ComeBack3 end;
  1342.                                         if MyAnchor^.ap_Info.fib_DirEntryType<0 then begin
  1343.                                                 redoFile:
  1344.                                                 replace:=FALSE;
  1345.                                                 alreadyNotFound:=FALSE;
  1346.                                                 MyString:=TrashNode^.pn_Path;
  1347.                                                 dummy:=long(AddPart(MyString,MyAnchor^.ap_Info.fib_FileName,364));
  1348.                                                 if (CurrentMethodFiles) and (opLayer=2) then if CopyEntry(MyString,MyXTP.Trasher,DoingString,FALSE,replace,win)<>0 then begin alreadyNotFound:=TRUE; goto AlternateFileFailed end;
  1349.                                                 if TrashEntry(MyString,DoingString,FALSE,TRUE,FALSE,win)<>0 then alreadyNotFound:=TRUE;
  1350.                                                 AlternateFileFailed:
  1351.                                                 if alreadyNotFound then begin
  1352.                                                         dummy:=GiveQuestion("XTrash 1.01 - "+DoingString,"Wie soll auf den aufgetretenen Fehler"+LF+"reagiert werden?","Nochmal versuchen|Löschort verlassen",win);
  1353.                                                         if dummy=0 then begin ExitTrashing:=1; goto CureAnError end;
  1354.                                                         if dummy=1 then goto redoFile;
  1355.                                                 end
  1356.                                         end else begin
  1357.                                                 dummy:=long(AddPart(TrashNode^.pn_Path,MyAnchor^.ap_Info.fib_FileName,256));
  1358.                                                 if Dummy=0 then begin
  1359.                                                         dummy:=GiveQuestion("XTrash 1.01 - "+DoingString,"Der Pfad von"+LF+MyAnchor^.ap_Info.fib_FileName+LF+"ist zu lang.","Löschort verlassen",win);
  1360.                                                         ExitTrashing:=1; goto CureAnError
  1361.                                                 end;
  1362.                                                 New(AnchorNodeV);
  1363.                                                 AnchorNodeV^.ano_Node.ln_Type:=NT_UNKNOWN;
  1364.                                                 AnchorNodeV^.ano_Node.ln_Pri:=0;
  1365.                                                 AnchorNodeV^.ano_Node.ln_Name:=NIL;
  1366.                                                 AnchorNodeV^.ano_Anchor:=MyAnchor;
  1367.                                                 AnchorNodeV^.ano_Lock:=CurrentLock;
  1368.                                                 AddTail(AnchorList,p_Node(AnchorNodeV));
  1369.                                                 New(DisplayNode);
  1370.                                                 if TrashNode^.pn_Path[length(TrashNode^.pn_Path)]=":" then MyString:=TrashNode^.pn_Path else MyString:=FilePart(TrashNode^.pn_Path);
  1371.                                                 DisplayNode^.stn_Node.ln_pri:=0;
  1372.                                                 PrepareNode(DisplayNode,MyString);
  1373.                                                 AddTail(DisplayList,p_Node(DisplayNode));
  1374.                                                 if windowDisplaying then begin
  1375.                                                         TagsCHANGES[1].ti_Tag:=GTLV_Labels;
  1376.                                                         TagsCHANGES[1].ti_Data:=long(DisplayList);
  1377.                                                         if dispLayer<10 then
  1378.                                                                 TagsCHANGES[2].ti_Tag:=TAG_END
  1379.                                                         else begin
  1380.                                                                 TagsCHANGES[2].ti_Tag:=GTLV_Top;
  1381.                                                                 TagsCHANGES[2].ti_Data:=dispLayer-8;
  1382.                                                                 TagsCHANGES[3].ti_Tag:=TAG_END
  1383.                                                         end;
  1384.                                                         dispLayer:=dispLayer+1;
  1385.                                                         GT_SetGadgetAttrsA(GadgetPathList,win,NIL,^TagsCHANGES)
  1386.                                                 end;
  1387.                                                 goto Stick
  1388.                                         end;
  1389.                                         Stick2:
  1390.                                         dummy:=MatchNext(MyAnchor);
  1391.                                         if dummy<>0 then begin
  1392.                                                 if dummy=ERROR_NO_MORE_ENTRIES then goto CureAnError else ExitTrashing:=999;
  1393.                                                 FoundAnError:
  1394.                                                 if ExitTrashing<>999 then begin MyAnchor:=NIL; ExitTrashing:=0 end;
  1395.                                                 if dummy<>ERROR_NO_MORE_ENTRIES then begin
  1396.                                                         if TrashNode^.pn_Path[length(TrashNode^.pn_Path)]=":" then MyString:=TrashNode^.pn_Path else MyString:=FilePart(TrashNode^.pn_Path);
  1397.                                                         Dummy:=long(Fault(Dummy,NIL,VariableString,364));
  1398.                                                         dummy:=GiveQuestion("XTrash 1.01 - "+DoingString,"Fehler beim Lesen von"+LF+MyString+"."+LF+"("+VariableString+")","Löschort verlassen",win);
  1399.                                                         ExitTrashing:=1
  1400.                                                 end;
  1401.                                                 CureAnError:
  1402.                                                 layer:=layer-1;
  1403.                                                 dispLayer:=dispLayer-1;
  1404.                                                 if MyAnchor<>NIL then begin
  1405.                                                         MatchEnd(MyAnchor);
  1406.                                                         dispose(MyAnchor);
  1407.                                                 end;
  1408.                                                 UnLock(CurrentLock);
  1409.                                                 if layer<>0 then begin
  1410.                                                         AnchorNodeV:=p_AnchorNode(AnchorList^.lh_TailPred);
  1411.                                                         MyAnchor:=AnchorNodeV^.ano_Anchor;
  1412.                                                         CurrentLock:=AnchorNodeV^.ano_Lock;
  1413.                                                         myTail:=RemTail(AnchorList);
  1414.                                                         dispose(AnchorNodeV);
  1415.                                                         if ExitTrashing=0 then if TrashEntry(TrashNode^.pn_Path,DoingString,FALSE,TRUE,TRUE,win)<>0 then ExitTrashing:=1;
  1416.                                                         TrashNode^.pn_Path:=copy(TrashNode^.pn_Path,1,length(TrashNode^.pn_Path)-length(PathPart(TrashNode^.pn_Path)));
  1417.                                                         DisplayNode:=p_StringNode(DisplayList^.lh_TailPred);
  1418.                                                         dispose(DisplayNode);
  1419.                                                         myTail:=RemTail(DisplayList);
  1420.                                                         if windowDisplaying then begin
  1421.                                                                 TagsCHANGES[1].ti_Tag:=GTLV_Labels;
  1422.                                                                 TagsCHANGES[1].ti_Data:=long(DisplayList);
  1423.                                                                 if dispLayer<10 then
  1424.                                                                         TagsCHANGES[2].ti_Tag:=TAG_END
  1425.                                                                 else begin
  1426.                                                                         TagsCHANGES[2].ti_Tag:=GTLV_Top;
  1427.                                                                         TagsCHANGES[2].ti_Data:=dispLayer-9;
  1428.                                                                         TagsCHANGES[3].ti_Tag:=TAG_END
  1429.                                                                 end;
  1430.                                                                 GT_SetGadgetAttrsA(GadgetPathList,win,NIL,^TagsCHANGES)
  1431.                                                         end;
  1432.                                                         if ExitTrashing>0 then goto CureAnError;
  1433.                                                         goto Stick2
  1434.                                                 end;
  1435.                                                 if ExitTrashing>0 then goto LookWhatExitTrash
  1436.                                         end;
  1437.                                 until layer=0
  1438.                         end else begin
  1439.                                 ComeBack4:
  1440.                                 ApplicationMessage:=p_AppMessage(GetMsg(ApplicationPort));
  1441.                                 if ApplicationMessage<>NIL then begin
  1442.                                         ReplyMsg(p_Message(ApplicationMessage));
  1443.                                         if windowDisplaying then WindowToFront(win) else begin ComeBack:=4; MyEndExit:=35; goto Overjump end;
  1444.                                 end;
  1445.                                 if windowDisplaying then begin
  1446.                                         imsg:=GT_GetIMsg(win^.userport); GT_ReplyIMsg(imsg);
  1447.                                         if (imsg<>NIL) and (imsg^.class<>IDCMP_INTUITICKS) then begin ComeBack:=4; goto BACK end;
  1448.                                         if ExitTrashing>0 then goto CureAnError;
  1449.                                 end;
  1450.                                 if Pause then begin SIGNALS:=_Wait(winBit or AppBit); goto ComeBack4 end;
  1451.                                 goto FoundAnError
  1452.                         end
  1453.                 end;
  1454.                 if (opLayer=1) or (((opLayer=2) or ((opLayer=3) and (CurrentMethodTrash))) and (ExitTrashing=0)) then begin
  1455.                         if opLayer=1 then DidIt:=FALSE else DidIt:=TRUE;
  1456.                         replace:=FALSE;
  1457.                         alreadyNotFound:=FALSE;
  1458.                         if (CurrentMethodFiles) and (opLayer=1) then case (CopyEntry(TrashNode^.pn_Path,MyXTP.Trasher,DoingString,FALSE,replace,win)) of
  1459.                                 (ERROR_OBJECT_NOT_FOUND): begin
  1460.                                         alreadyNotFound:=TRUE;
  1461.                                         goto FileFailed
  1462.                                 end
  1463.                                 0:      begin end
  1464.                                 else    goto FileFailed2
  1465.                         end;
  1466.                         case (TrashEntry(TrashNode^.pn_Path,DoingString,FALSE,FALSE,DidIt,win)) of
  1467.                                 (ERROR_OBJECT_NOT_FOUND):
  1468.                                         alreadyNotFound:=TRUE
  1469.                                 0:      begin end
  1470.                                 else    goto FileFailed2
  1471.                         end;
  1472.                         FileFailed:
  1473.                         if (CurrentMethodFiles) and (opLayer=1) then case (CopyEntry(TrashNode^.pn_Path,MyXTP.Trasher,DoingString,TRUE,replace,win)) of
  1474.                                 (ERROR_OBJECT_NOT_FOUND): begin
  1475.                                         if alreadyNotFound then begin
  1476.                                                 Dummy:=long(Fault(ERROR_OBJECT_NOT_FOUND,NIL,VariableString,364));
  1477.                                                 if CurrentMethodFiles then
  1478.                                                         GiveError("XTrash 1.01 - "+DoingString,"Weder auf die Datei"+LF+TrashNode^.pn_Path+LF+"als auf deren Piktogramm"+LF+"bzw. den Mülleimer"+LF+"konnte zugegriffen werden."+LF+"("+VariableString+")",win)
  1479.                                                 else
  1480.                                                         GiveError("XTrash 1.01 - "+DoingString,"Weder auf die Datei"+LF+TrashNode^.pn_Path+LF+"als auf deren Piktogramm"+LF+"konnte zugegriffen werden."+LF+"("+VariableString+")",win)
  1481.                                         end;
  1482.                                         goto FileFailed2
  1483.                                 end
  1484.                                 0:      begin end
  1485.                                 else    goto FileFailed2
  1486.                         end;
  1487.                         if (TrashEntry(TrashNode^.pn_Path,DoingString,TRUE,FALSE,DidIt,win)=ERROR_OBJECT_NOT_FOUND) and (alreadyNotFound) then begin
  1488.                                 Dummy:=long(Fault(ERROR_OBJECT_NOT_FOUND,NIL,VariableString,364));
  1489.                                 if CurrentMethodFiles then
  1490.                                         GiveError("XTrash 1.01 - "+DoingString,"Weder auf die Datei"+LF+TrashNode^.pn_Path+LF+"als auf deren Piktogramm"+LF+"bzw. den Mülleimer"+LF+"konnte zugegriffen werden."+LF+"("+VariableString+")",win)
  1491.                                 else
  1492.                                         GiveError("XTrash 1.01 - "+DoingString,"Weder auf die Datei"+LF+TrashNode^.pn_Path+LF+"als auf deren Piktogramm"+LF+"konnte zugegriffen werden."+LF+"("+VariableString+")",win);
  1493.                         end;
  1494.                         FileFailed2:
  1495.                 end;
  1496.                 if opLayer=4 then begin
  1497.                         OldLock:=Open("CON:0/80/640/100/XTrash 1.01 - Formatiere Datenträger/CLOSE/AUTO/WAIT",MODE_NEWFILE);
  1498.                         if IOErr<>0 then begin
  1499.                                 GiveError("XTrash 1.01 - "+DoingString,"Der Datenträger [im Laufwerk]"+LF+TrashNode^.pn_Path+LF+"konnte nicht formatiert werden."+LF+"(Ausgabefenster war nicht zu öffnen.)",win);
  1500.                                 goto LookWhatExitTrash
  1501.                         end;
  1502.                         VariableString:=GetDevice(TrashNode^.pn_Path,DoingString,win);
  1503.                         if VariableString<>"" then begin
  1504.                                 TagsCHANGES[1]:=TagItem(SYS_Input,OldLock);
  1505.                                 TagsCHANGES[2]:=TagItem(SYS_Output,long(NIL));
  1506.                                 TagsCHANGES[3].ti_Tag:=NP_Name; TagsCHANGES[3].ti_Data:="Formatter";
  1507.                                 TagsCHANGES[4]:=TagItem(NP_Priority,0);
  1508.                                 if MyXTP.FormatStack<0 then TagsCHANGES[5].ti_Tag:=TAG_END else begin TagsCHANGES[5]:=TagItem(NP_StackSize,MyXTP.FormatStack); TagsCHANGES[6].ti_Tag:=TAG_END end;
  1509.                                 MyString:=SetFormatString(MyXTP.Formatter,VariableString,CurrentDiskName,CurrentFormatOptions);
  1510.                                 if windowDisplaying then begin
  1511.                                         WaitPointer(win);
  1512.                                         GetRidOfForXTrash(win)
  1513.                                 end;
  1514.                                 dummy:=SystemTagList(MyString,^TagsCHANGES);
  1515.                                 if windowDisplaying then begin
  1516.                                         GetBackForXTrash(win,CG);
  1517.                                         NormalPointer(win)
  1518.                                 end;
  1519.                                 dummy:=IOErr;
  1520.                                 if dummy<>0 then begin
  1521.                                         Dummy:=long(Fault(dummy,NIL,MyString,364));
  1522.                                         GiveError("XTrash 1.01 - "+DoingString,"Der Datenträger in"+LF+VariableString+LF+"konnte nicht formatiert werden."+LF+"("+MyString+")",win);
  1523.                                         goto LookWhatExitTrash
  1524.                                 end
  1525.                         end;
  1526.                         dummy:=_Close(OldLock)
  1527.                 end;
  1528.                 LookWhatExitTrash:
  1529.                 DisplayNode:=p_StringNode(DisplayList^.lh_Head);
  1530.                 WHILE p_StringNode(DisplayNode^.stn_Node.ln_Succ)<>NIL DO BEGIN
  1531.                         DisplayNodeBack:=p_StringNode(DisplayNode^.stn_Node.ln_Succ);
  1532.                         Remove(p_Node(^DisplayNode^.stn_Node));
  1533.                         dispose(DisplayNode);
  1534.                         DisplayNode:=DisplayNodeBack;
  1535.                 END;
  1536.                 case ExitTrashing of
  1537.                         2:      goto ExitTheTrash
  1538.                         else    TrashNode:=p_PathNode(TrashNode^.pn_Node.ln_Succ);
  1539.                 end;
  1540.         END;
  1541.  
  1542.         if opLayer<4 then goto ComeBack1;
  1543.  
  1544.         ExitTheTrash:
  1545.  
  1546.         if windowDisplaying then begin ComeBack:=5; MyEndExit:=-35; goto Overjump end;
  1547.         ComeBack5:
  1548.  
  1549.         dispose(AnchorList);
  1550.         dispose(DisplayList);
  1551.  
  1552.         EXIT;
  1553.  
  1554.         BACK:
  1555.  
  1556.         case imsg^.class of
  1557.                 IDCMP_CLOSEWINDOW:
  1558.                         MyEndExit:=-35
  1559.                 IDCMP_GADGETUP: begin
  1560.                         CurrentGadget:=imsg^.iaddress;
  1561.                         case CurrentGadget^.gadgetid of
  1562.                                 1:      Pause:=NOT(Pause)
  1563.                                 2:      ExitTrashing:=2
  1564.                                 else
  1565.                         end
  1566.                 end
  1567.                 IDCMP_VANILLAKEY: begin
  1568.                         if imsg^.code>96 then imsg^.code:=imsg^.code-32;
  1569.                         case imsg^.code of
  1570.                                 27:     ExitTrashing:=2
  1571.                                 13:     MyEndExit:=-35
  1572.                                 32:     begin
  1573.                                         Pause:=NOT(Pause);
  1574.                                         TagsCHANGES[1]:=TagItem(GTCB_Checked,long(Pause));
  1575.                                         TagsCHANGES[2].ti_Tag:=TAG_END;
  1576.                                         GT_SetGadgetAttrsA(GadgetPause,win,NIL,^TagsCHANGES)
  1577.                                 end
  1578.                         end
  1579.                 end
  1580.                 else
  1581.         end;
  1582.  
  1583.         Overjump:
  1584.  
  1585.         if MyEndExit=35 then begin
  1586.                 scr:=LockPubScreen(NIL);
  1587.                 VI:=GetVisualInfoA(scr,NIL);
  1588.                 DI:=GetScreenDrawInfo(scr);
  1589.                 CG:=NIL;
  1590.                 CG:=CreateContext(^CG);
  1591.  
  1592.                 TagsCHANGES[1].ti_Tag:=GTTX_Text;
  1593.                 TagsCHANGES[1].ti_Data:=DoingString;
  1594.                 TagsCHANGES[2]:=TagItem(GTTX_Border,long(TRUE));
  1595.                 TagsCHANGES[3].ti_Tag:=TAG_END;
  1596.                 NewGadgetFields:=NewGadget(10,5,190,12,NIL,^tattr,0,0,VI,NIL);
  1597.                 GadgetDoing:=CreateGadgetA(TEXT_KIND,CG,^NewGadgetFields,^TagsCHANGES);
  1598.  
  1599.                 TagsCHANGES[1].ti_Tag:=GTLV_Labels;
  1600.                 TagsCHANGES[1].ti_Data:=long(DisplayList);
  1601.                 TagsCHANGES[2]:=TagItem(GTLV_ScrollWidth,16);
  1602.                 TagsCHANGES[3]:=TagItem(GTLV_ReadOnly,long(TRUE));
  1603.                 if dispLayer<10 then TagsCHANGES[4].ti_Tag:=TAG_END else begin TagsCHANGES[4]:=TagItem(GTLV_Top,dispLayer-8); TagsCHANGES[5].ti_Tag:=TAG_END end;
  1604.                 NewGadgetFields:=NewGadget(10,17,190,86,NIL,^tattr,0,0,VI,NIL);
  1605.                 GadgetPathList:=CreateGadgetA(LISTVIEW_KIND,GadgetDoing,^NewGadgetFields,
  1606.                         ^TagsCHANGES);
  1607.  
  1608.                 TagsCHANGES[1]:=TagItem(GTCB_Checked,long(Pause));
  1609.                 TagsCHANGES[2].ti_Tag:=TAG_END;
  1610.                 NewGadgetFields:=NewGadget(50,107,0,0,"Pause",^tattr,1,PLACETEXT_RIGHT,
  1611.                         VI,NIL);
  1612.                 GadgetPause:=CreateGadgetA(CHECKBOX_KIND,GadgetPathList,
  1613.                         ^NewGadgetFields,^TagsCHANGES);
  1614.  
  1615.                 NewGadgetFields:=NewGadget(140,107,60,12,"Stop",^tattr,2,PLACETEXT_IN,
  1616.                         VI,NIL);
  1617.                 GadgetStop:=CreateGadgetA(BUTTON_KIND,GadgetPause,^NewGadgetFields,NIL);
  1618.  
  1619.                 TagsCHANGES[1]:=TagItem(WA_Top,10);
  1620.                 TagsCHANGES[2]:=TagItem(WA_Left,20);
  1621.                 TagsCHANGES[3]:=TagItem(WA_InnerHeight,125);
  1622.                 TagsCHANGES[4]:=TagItem(WA_InnerWidth,210);
  1623.                 TagsCHANGES[5].ti_Tag:=WA_Title;
  1624.                 TagsCHANGES[5].ti_Data:="XTrash 1.01";
  1625.                 TagsCHANGES[6]:=TagItem(WA_Flags,WFLG_CLOSEGADGET or WFLG_GIMMEZEROZERO or
  1626.                         WFLG_ACTIVATE or WFLG_DRAGBAR or WFLG_SMART_REFRESH or
  1627.                         WFLG_DEPTHGADGET or WFLG_RMBTRAP);
  1628.                 TagsCHANGES[7]:=TagItem(WA_IDCMP,IDCMP_CLOSEWINDOW or IDCMP_GADGETUP or
  1629.                         IDCMP_GADGETDOWN or IDCMP_VANILLAKEY or IDCMP_MOUSEMOVE or
  1630.                         IDCMP_MOUSEBUTTONS or IDCMP_INTUITICKS);
  1631.                 TagsCHANGES[8]:=TagItem(WA_CustomScreen,long(scr));
  1632.                 TagsCHANGES[9]:=TagItem(WA_Gadgets,long(CG));
  1633.                 TagsCHANGES[10]:=TagItem(WA_MouseQueue,0);
  1634.                 TagsCHANGES[11]:=TagItem(WA_RptQueue,0);
  1635.                 TagsCHANGES[12].ti_Tag:=TAG_END;
  1636.                 win:=OpenWindowTagList(NIL,^TagsCHANGES);
  1637.                 winBit:=long(1) shl win^.userport^.mp_sigbit;
  1638.                 GT_RefreshWindow(win,NIL);
  1639.                 windowDisplaying:=TRUE
  1640.         end;
  1641.  
  1642.         if MyEndExit=-35 then begin
  1643.                 CloseWindow(win);
  1644.                 FreeGadgets(CG);
  1645.                 FreeScreenDrawInfo(scr,DI);
  1646.                 FreeVisualInfo(VI);
  1647.                 UnLockPubScreen(NIL,scr);
  1648.                 windowDisplaying:=FALSE;
  1649.                 win:=NIL
  1650.         end;
  1651.  
  1652.         MyEndExit:=-1;
  1653.  
  1654.         case ComeBack of
  1655.                 1:      begin ComeBack:=0; goto ComeBack1 end
  1656.                 2:      begin ComeBack:=0; goto ComeBack2 end
  1657.                 3:      begin ComeBack:=0; goto ComeBack3 end
  1658.                 4:      begin ComeBack:=0; goto ComeBack4 end
  1659.                 5:      begin ComeBack:=0; goto ComeBack5 end
  1660.         end;
  1661. END;
  1662.  
  1663.  
  1664. PROCEDURE AddInList(MyLock:BPTR,GeneralName:STR,win:p_window);
  1665. LABEL   SimplyOut;
  1666. VAR     dummy   :                               long;
  1667.         MyDOB   :                               p_DiskObject;
  1668.         MyFIB   :                               p_FileInfoBlock;
  1669. BEGIN
  1670.         if (MyLock=0) and (copy(GeneralName,length(GeneralName),1)<>":") then begin GiveError("IconDrop - ["+GeneralName+"]","Das Piktogramm kann nicht gelesen werden.",NIL); goto SimplyOut end;
  1671.         if (MyLock=0) and (copy(GeneralName,length(GeneralName),1)=":") then begin VariableString:=GeneralName; GeneralName:=""; dummy:=1 end else dummy:=NameFromLock(MyLock,VariableString,256);
  1672.         if dummy=0 then begin GiveError ("IconDrop - ["+GeneralName+"]","Name des Piktogramms nicht feststellbar.",win); goto SimplyOut end;
  1673.         if GeneralName<>"" then dummy:=long(AddPart(VariableString,GeneralName,256)) else dummy:=1;
  1674.         if dummy=0 then begin
  1675.                 if VariableString[length(VariableString)]=":" then GeneralName:=VariableString else GeneralName:=FilePart(VariableString);
  1676.                 GiveError ("IconDrop - ["+GeneralName+"]","Name des Piktogramms zu lang.",win);
  1677.                 goto SimplyOut
  1678.         end;
  1679.         if VariableString[length(VariableString)]=":" then opLayer:=4 else begin
  1680.                 if GeneralName<>"" then opLayer:=1 else begin
  1681.                         MyDOB:=GetDiskObjectNew(VariableString);
  1682.                         if MyDOB=NIL then opLayer:=2 else begin
  1683.                                 if MyDOB^.do_Type=WBGARBAGE then opLayer:=3 else opLayer:=2;
  1684.                                 FreeDiskObject(MyDOB)
  1685.                         end
  1686.                 end
  1687.         end;
  1688.         if opLayer=2 then begin
  1689.                 new(MyFIB);
  1690.                 if Examine(MyLock,MyFIB)=DOSTRUE then
  1691.                         if (MyFIB^.fib_DirEntryType=ST_SOFTLINK) or (MyFIB^.fib_DirEntryType=ST_LINKDIR) then opLayer:=1;
  1692.                 dispose(MyFIB)
  1693.         end;
  1694.         CASE opLayer of
  1695.                 1:      TrashNode:=p_PathNode(FileList^.lh_Head);
  1696.                 2:      TrashNode:=p_PathNode(DirList^.lh_Head);
  1697.                 3:      TrashNode:=p_PathNode(TrashList^.lh_Head);
  1698.                 4:      TrashNode:=p_PathNode(DiskList^.lh_Head);
  1699.         end;
  1700.         WHILE p_PathNode(TrashNode^.pn_Node.ln_Succ)<>NIL DO BEGIN
  1701.                 if VariableString=TrashNode^.pn_Path then goto SimplyOut;
  1702.                 TrashNode:=p_PathNode(TrashNode^.pn_Node.ln_Succ)
  1703.         END;
  1704.         new(TrashNode);
  1705.         TrashNode^.pn_Node.ln_Pri:=opLayer;
  1706.         PrepareNode(TrashNode,VariableString);
  1707.         CASE opLayer of
  1708.                 1:      begin AddTail(FileList,p_Node(TrashNode)); FileNum:=FileNum+1 end
  1709.                 2:      begin AddTail(DirList,p_Node(TrashNode)); DirNum:=DirNum+1 end
  1710.                 3:      begin AddTail(TrashList,p_Node(TrashNode)); TrashNum:=TrashNum+1 end
  1711.                 4:      begin AddTail(DiskList,p_Node(TrashNode)); DiskNum:=DiskNum+1 end
  1712.         end;
  1713.         SimplyOut:
  1714. END;
  1715.  
  1716. FUNCTION FindInnerThing(Source,Searcher:str):Boolean;
  1717. VAR     i       :                               integer;
  1718.         Josh    :                               DirNameString;
  1719. BEGIN
  1720.         Josh:=" "+Source+" ";
  1721.  
  1722.         while pos("\\",Josh)<>0 do begin
  1723.                 i:=pos("\\",Josh);
  1724.                 Josh:=copy(Josh,1,i-1)+LF+copy(Josh,i+2,length(Josh)-i-1)
  1725.         end;
  1726.         FindInnerThing:=pos(Searcher,Josh)<>0;
  1727. END;
  1728.  
  1729.  
  1730. PROCEDURE GetRidOfForBeforeXTrash(VAR win:p_window);
  1731. VAR     DidIt   :                               boolean;
  1732. BEGIN
  1733.         win^.flags:=win^.flags or WFLG_RMBTRAP;
  1734.         DidIt:=ModifyIDCMP(win,0);
  1735.         win^.firstgadget^.nextgadget^.nextgadget^.nextgadget^.nextgadget:=NIL
  1736. END;
  1737.  
  1738. PROCEDURE GetBackForBeforeXTrash(VAR win:p_window,GadgetCycle:p_gadget);
  1739. VAR     DidIt   :                               boolean;
  1740. BEGIN
  1741.         win^.firstgadget^.nextgadget^.nextgadget^.nextgadget^.nextgadget:=GadgetCycle;
  1742.         DidIt:=ModifyIDCMP(win,IDCMP_CLOSEWINDOW or IDCMP_GADGETUP or IDCMP_VANILLAKEY or IDCMP_NEWSIZE or IDCMP_GADGETDOWN or IDCMP_MENUPICK);
  1743.         win^.flags:=win^.flags xor WFLG_RMBTRAP;
  1744.         RefreshGadgets(win^.FirstGadget,win,NIL);
  1745.         GT_RefreshWindow(win,NIL);
  1746. END;
  1747.  
  1748. PROCEDURE BeforeXTrash;
  1749. LABEL   BACK,ReDisplay,ReBuild,Values;
  1750. VAR     win     :                               p_window;
  1751.         winBit  :                               long;
  1752.         winOffset:                              long;
  1753.         lastGadget:                             p_gadget;
  1754.         CG      :                               p_gadget;
  1755.         CurrentGadget:                          p_gadget;
  1756.         NewGadgetFields:                        newgadget;
  1757.         GadgetMethodTrash:                      p_gadget;
  1758.         GadgetMethodFiles:                      p_gadget;
  1759.         GadgetDiskName:                         p_gadget;
  1760.         GadgetFormatOptions:                    p_gadget;
  1761.         GadgetOK:                               p_gadget;
  1762.         GadgetStd:                              p_gadget;
  1763.         GadgetCancel:                           p_gadget;
  1764.         MethodTrashContents:                    array[1..3] of str;
  1765.         MethodFilesContents:                    array[1..3] of str;
  1766.         NewMenuFields:                          array[1..4] of NewMenu;
  1767.         MenuFields:                             p_Menu;
  1768.         NItem   :                               p_menuitem;
  1769.         ChosenMenu:                             long;
  1770.         DidIt   :                               boolean;
  1771.         imsg    :                               p_intuimessage;
  1772.         MyEndexit:                              integer;
  1773.         TagsCHANGES:                            array[1..13] of TagItem;
  1774.         ZOM     :                               array[1..4] of word;
  1775.         ApplicationWindow:                      p_AppWindow;
  1776.         ApplicationMessage:                     p_AppMessage;
  1777.         OldFile,OldDir,OldTrash,OldDisk:        long;
  1778.         ChangeASG,BackASG:                      array [0..1] of Byte;
  1779.         SI      :                               p_StringInfo;
  1780.         DisplayName:                            Boolean;
  1781.         DisplayOptions:                         Boolean;
  1782. BEGIN
  1783.         scr:=LockPubScreen(NIL);
  1784.         VI:=GetVisualInfoA(scr,NIL);
  1785.         DI:=GetScreenDrawInfo(scr);
  1786.  
  1787.         ReBuild:
  1788.         CG:=NIL;
  1789.         CG:=CreateContext(^CG);
  1790.         ChangeASG[0]:=DI^.dri_Pens^[SHADOWPEN];
  1791.         ChangeASG[1]:=DI^.dri_Pens^[SHINEPEN];
  1792.         if ChangeASG[0]=ChangeASG[1] then
  1793.                 ChangeASG[0]:=DI^.dri_Pens^[FILLTEXTPEN];
  1794.  
  1795.         lastgadget:=CG;
  1796.         winOffset:=0;
  1797.  
  1798.         if (FileNum<>0) or (DirNum<>0) then begin
  1799.                 MethodFilesContents[1]:="_Dateien löschen ";
  1800.                 MethodFilesContents[2]:="Dateien in Mülleimer _bewegen";
  1801.                 MethodFilesContents[3]:=NIL;
  1802.                 TagsCHANGES[1]:=TagItem(GT_UnderScore,long("_"));
  1803.                 TagsCHANGES[2]:=TagItem(GTMX_Labels,long(^MethodFilesContents));
  1804.                 TagsCHANGES[3]:=TagItem(GTMX_Spacing,3);
  1805.                 TagsCHANGES[4]:=TagItem(GTMX_Active,long(CurrentMethodFiles));
  1806.                 TagsCHANGES[5].ti_Tag:=TAG_END;
  1807.                 NewGadgetFields:=NewGadget(16,95,0,0,NIL,^tattr,1,PLACETEXT_RIGHT,VI,NIL);
  1808.                 GadgetMethodFiles:=CreateGadgetA(MX_KIND,lastGadget,
  1809.                         ^NewGadgetFields,^TagsCHANGES);
  1810.                 winOffset:=winOffset+25;
  1811.                 lastGadget:=GadgetMethodFiles
  1812.         end;
  1813.  
  1814.         if TrashNum<>0 then begin
  1815.                 MethodTrashContents[1]:="Mülleimer _leeren";
  1816.                 MethodTrashContents[2]:="_Mülleimer löschen";
  1817.                 MethodTrashContents[3]:=NIL;
  1818.                 TagsCHANGES[1]:=TagItem(GT_UnderScore,long("_"));
  1819.                 TagsCHANGES[2]:=TagItem(GTMX_Labels,long(^MethodTrashContents));
  1820.                 TagsCHANGES[3]:=TagItem(GTMX_Spacing,3);
  1821.                 TagsCHANGES[4]:=TagItem(GTMX_Active,long(CurrentMethodTrash));
  1822.                 TagsCHANGES[5].ti_Tag:=TAG_END;
  1823.                 NewGadgetFields:=NewGadget(16,95+winOffset,0,0,NIL,^tattr,2,PLACETEXT_RIGHT,VI,NIL);
  1824.                 GadgetMethodTrash:=CreateGadgetA(MX_KIND,lastGadget,
  1825.                         ^NewGadgetFields,^TagsCHANGES);
  1826.                 lastGadget:=GadgetMethodTrash;
  1827.                 winOffset:=winOffset+25
  1828.         end;
  1829.  
  1830.         if DiskNum<>0 then begin
  1831.                 DisplayName:=FindInnerThing(MyXTP.Formatter,"\n");
  1832.                 DisplayOptions:=FindInnerThing(MyXTP.Formatter,"\o");
  1833.  
  1834.                 if DisplayName then begin
  1835.                         TagsCHANGES[1]:=TagItem(GTST_MaxChars,30);
  1836.                         TagsCHANGES[2].ti_Tag:=GTST_String; TagsCHANGES[2].ti_Data:=CurrentDiskName;
  1837.                         TagsCHANGES[3]:=TagItem(GT_Underscore,long("_"));
  1838.                         TagsCHANGES[4].ti_Tag:=TAG_END;
  1839.                         NewGadgetFields:=NewGadget(96,95+winOffset,204,12,"Fmt. _Name",^tattr,3,PLACETEXT_LEFT,VI,NIL);
  1840.                         GadgetDiskName:=CreateGadgetA(STRING_KIND,lastGadget,^NewGadgetFields,^TagsCHANGES);
  1841.                         lastGadget:=GadgetDiskName;
  1842.                         winOffset:=winOffset+12
  1843.                 end;
  1844.  
  1845.                 if DisplayOptions then begin
  1846.                         TagsCHANGES[1]:=TagItem(GTST_MaxChars,80);
  1847.                         TagsCHANGES[2].ti_Tag:=GTST_String; TagsCHANGES[2].ti_Data:=CurrentFormatOptions;
  1848.                         TagsCHANGES[3]:=TagItem(GT_Underscore,long("_"));
  1849.                         TagsCHANGES[4].ti_Tag:=TAG_END;
  1850.                         NewGadgetFields:=NewGadget(96,95+winOffset+integer(DisplayName),204,12,"_Optionen",^tattr,4,PLACETEXT_LEFT,VI,NIL);
  1851.                         GadgetFormatOptions:=CreateGadgetA(STRING_KIND,lastGadget,^NewGadgetFields,^TagsCHANGES);
  1852.                         lastGadget:=GadgetFormatOptions;
  1853.                         winOffset:=winOffset+12+integer(DisplayName)
  1854.                 end;
  1855.  
  1856.                 winOffset:=winOffset+5*integer(DisplayOptions or DisplayName);
  1857.  
  1858.                 if (ChangeASG[0]<>ChangeASG[1]) and (MyXTP.Coloured) then begin
  1859.                         if DisplayName then begin
  1860.                                 SI:=GadgetDiskName^.SpecialInfo;
  1861.                                 SI^.Extension^.ActivePens:=ChangeASG
  1862.                         end;
  1863.                         if DisplayOptions then begin
  1864.                                 SI:=GadgetFormatOptions^.SpecialInfo;
  1865.                                 SI^.Extension^.ActivePens:=ChangeASG
  1866.                         end
  1867.                 end
  1868.         end;
  1869.  
  1870.         NewGadgetFields:=NewGadget(10,100+winOffset,90,12,"Trash...",^tattr,5,
  1871.                 PLACETEXT_IN,VI,NIL);
  1872.         GadgetOK:=CreateGadgetA(BUTTON_KIND,lastGadget,^NewGadgetFields,
  1873.                 NIL);
  1874.  
  1875.         TagsCHANGES[1]:=TagItem(GT_Underscore,long("_"));
  1876.         TagsCHANGES[2].ti_Tag:=TAG_END;
  1877.         NewGadgetFields:=NewGadget(115,100+winOffset,100,12,"Std.-_Werte",^tattr,6,
  1878.                 PLACETEXT_IN,VI,NIL);
  1879.         GadgetStd:=CreateGadgetA(BUTTON_KIND,GadgetOK,^NewGadgetFields,
  1880.                 ^TagsCHANGES);
  1881.  
  1882.         NewGadgetFields:=NewGadget(230,100+winOffset,70,12,"Zurück",^tattr,7,
  1883.                 PLACETEXT_IN,VI,NIL);
  1884.         GadgetCancel:=CreateGadgetA(BUTTON_KIND,GadgetStd,^NewGadgetFields,NIL);
  1885.  
  1886.         NewMenuFields[1]:=NewMenu(NM_TITLE,0,"Projekt",NIL,0,0,NIL);
  1887.         NewMenuFields[2]:=NewMenu(NM_ITEM,0,"Einstellungen...",NIL,0,0,NIL);
  1888.         NewMenuFields[3]:=NewMenu(NM_ITEM,0,"Ende","Q",0,0,NIL);
  1889.         NewMenuFields[4].nm_Type:=NM_END;
  1890.         MenuFields:=CreateMenusA(^NewMenuFields,NIL);
  1891.         TagsCHANGES[1].ti_Tag:=GTMN_TextAttr;
  1892.         TagsCHANGES[1].ti_Data:=^tattr;
  1893.         TagsCHANGES[2].ti_Tag:=TAG_END;
  1894.         DidIt:=LayoutMenusA(MenuFields,VI,^TagsCHANGES);
  1895.  
  1896.         ZOM[1]:=20;
  1897.         ZOM[2]:=10;
  1898.         ZOM[3]:=200;
  1899.         ZOM[4]:=scr^.font^.ta_Ysize+6;
  1900.         TagsCHANGES[1]:=TagItem(WA_Top,10);
  1901.         TagsCHANGES[2]:=TagItem(WA_Left,20);
  1902.         TagsCHANGES[3]:=TagItem(WA_InnerHeight,117+winOffset);
  1903.         TagsCHANGES[4]:=TagItem(WA_InnerWidth,310);
  1904.         TagsCHANGES[5].ti_Tag:=WA_Title;
  1905.         TagsCHANGES[5].ti_Data:="XTrash 1.01";
  1906.         TagsCHANGES[6]:=TagItem(WA_Flags,WFLG_CLOSEGADGET OR WFLG_GIMMEZEROZERO OR
  1907.                 WFLG_ACTIVATE OR WFLG_DRAGBAR OR WFLG_SMART_REFRESH OR
  1908.                 WFLG_DEPTHGADGET or WFLG_HASZOOM);
  1909.         TagsCHANGES[7]:=TagItem(WA_IDCMP,IDCMP_CLOSEWINDOW or IDCMP_GADGETUP or
  1910.                 IDCMP_VANILLAKEY or IDCMP_NEWSIZE or IDCMP_GADGETDOWN or IDCMP_MENUPICK);
  1911.         TagsCHANGES[8]:=TagItem(WA_CustomScreen,long(scr));
  1912.         TagsCHANGES[9]:=TagItem(WA_Gadgets,long(CG));
  1913.         TagsCHANGES[10]:=TagItem(WA_MouseQueue,0);
  1914.         TagsCHANGES[11]:=TagItem(WA_RptQueue,0);
  1915.         TagsCHANGES[12].ti_Tag:=WA_Zoom;
  1916.         TagsCHANGES[12].ti_Data:=ZOM;
  1917.         TagsCHANGES[13].ti_Tag:=TAG_END;
  1918.         win:=OpenWindowTagList(NIL,^TagsCHANGES);
  1919.         winBit:=long(1) shl win^.userport^.mp_SigBit;
  1920.         dummy:=SetFont(win^.RPort,tfont);
  1921.  
  1922.         DidIt:=SetMenuStrip(win,MenuFields);
  1923.         GT_RefreshWindow(win,NIL);
  1924.         TagsCHANGES[1]:=TagItem(GT_VisualInfo,long(VI));
  1925.         TagsCHANGES[2]:=TagItem(GTBB_Recessed,long(TRUE));
  1926.         TagsCHANGES[3].ti_Tag:=TAG_END;
  1927.         DrawBevelBoxA(win^.RPort,10,5,290,85,^TagsCHANGES);
  1928.  
  1929.         ApplicationWindow:=AddAppWindowA(1,0,win,ApplicationPort,NIL);
  1930.  
  1931.         ReDisplay:
  1932.         SetAPen(win^.rport,DI^.dri_Pens^[TEXTPEN]);
  1933.         Move(win^.rport,16,14); dummy:=_Text(win^.rport,"Warnung: Gelöschte Dateien, Daten-",34);
  1934.         Move(win^.rport,16,23); dummy:=_Text(win^.rport,"träger und Verzeichnisse sind",29);
  1935.         Move(win^.rport,16,32); dummy:=_Text(win^.rport,"unwiederbringlich verloren!",27);
  1936.         Move(win^.rport,16,84); dummy:=_Text(win^.rport,"ist/sind zum Löschen ausgewählt.",32);
  1937.         VariableString:=intstr(FileNum)+" Datei(en)"; VariableStr:=VariableString;
  1938.         Move(win^.rport,16,48); dummy:=_Text(win^.rport,VariableString,length(intstr(FileNum))+10);
  1939.         VariableString:=intstr(DirNum)+" Verzeichnis(se)"; VariableStr:=VariableString;
  1940.         Move(win^.rport,16,57); dummy:=_Text(win^.rport,VariableString,length(intstr(DirNum))+16);
  1941.         VariableString:=intstr(TrashNum)+" Mülleimer"; VariableStr:=VariableString;
  1942.         Move(win^.rport,16,66); dummy:=_Text(win^.rport,VariableString,length(intstr(TrashNum))+10);
  1943.         VariableString:=intstr(DiskNum)+" Datenträger"; VariableStr:=VariableString;
  1944.         Move(win^.rport,16,75); dummy:=_Text(win^.rport,VariableString,length(intstr(DiskNum))+12);
  1945.  
  1946.         BACK:
  1947.         MyEndExit:=-1;
  1948.  
  1949.         REPEAT
  1950.                 imsg:=GT_GetIMsg(win^.userport);
  1951.                 GT_ReplyIMsg(imsg);
  1952.                 if imsg=NIL then begin
  1953.                         ApplicationMessage:=p_AppMessage(GetMsg(ApplicationPort));
  1954.                         if ApplicationMessage<>NIL then
  1955.                                 SIGNALS:=AppBit
  1956.                         else begin
  1957.                                 SIGNALS:=_wait(AppBit or winBit);
  1958.                                 if SIGNALS=winBit then begin
  1959.                                         imsg:=GT_GetIMsg(win^.userport);
  1960.                                         GT_ReplyIMsg(imsg)
  1961.                                 end else begin
  1962.                                         ApplicationMessage:=p_AppMessage(GetMsg(ApplicationPort));
  1963.                                         if ApplicationMessage=NIL then SIGNALS:=0
  1964.                                 end
  1965.                         end
  1966.                 end else
  1967.                         SIGNALS:=winBit;
  1968.                 if SIGNALS=winBit then begin
  1969.                         case imsg^.class of
  1970.                                 IDCMP_NEWSIZE: begin
  1971.                                         TagsCHANGES[1]:=TagItem(GT_VisualInfo,long(VI));
  1972.                                         TagsCHANGES[2]:=TagItem(GTBB_Recessed,long(TRUE));
  1973.                                         TagsCHANGES[3].ti_Tag:=TAG_END;
  1974.                                         DrawBevelBoxA(win^.RPort,10,5,290,85,^TagsCHANGES);
  1975.                                         goto ReDisplay
  1976.                                 end
  1977.                                 IDCMP_CLOSEWINDOW: MyEndExit:=0
  1978.                                 IDCMP_VANILLAKEY: begin
  1979.                                         if imsg^.code>96 then imsg^.code:=imsg^.code-32;
  1980.                                         case imsg^.code of
  1981.                                                 13:     MyEndExit:=1
  1982.                                                 27:     MyEndExit:=0
  1983.                                                 78:     if (DiskNum<>0) and (DisplayName) then DidIt:=activategadget(GadgetDiskName,win,nil)
  1984.                                                 79:     if (DiskNum<>0) and (DisplayOptions) then DidIt:=activategadget(GadgetFormatOptions,win,nil)
  1985.                                                 68:     if (FileNum<>0) or (DirNum<>0) then begin
  1986.                                                         TagsCHANGES[1]:=TagItem(GTMX_Active,0);
  1987.                                                         TagsCHANGES[2].ti_Tag:=TAG_END;
  1988.                                                         CurrentMethodFiles:=FALSE;
  1989.                                                         GT_SetGadgetAttrsA(GadgetMethodFiles,win,NIL,^TagsCHANGES)
  1990.                                                 end
  1991.                                                 66:     if (FileNum<>0) or (DirNum<>0) then begin
  1992.                                                         TagsCHANGES[1]:=TagItem(GTMX_Active,1);
  1993.                                                         TagsCHANGES[2].ti_Tag:=TAG_END;
  1994.                                                         CurrentMethodFiles:=TRUE;
  1995.                                                         GT_SetGadgetAttrsA(GadgetMethodFiles,win,NIL,^TagsCHANGES)
  1996.                                                 end
  1997.                                                 76:     if TrashNum<>0 then begin
  1998.                                                         TagsCHANGES[1]:=TagItem(GTMX_Active,0);
  1999.                                                         TagsCHANGES[2].ti_Tag:=TAG_END;
  2000.                                                         CurrentMethodTrash:=FALSE;
  2001.                                                         GT_SetGadgetAttrsA(GadgetMethodTrash,win,NIL,^TagsCHANGES)
  2002.                                                 end
  2003.                                                 77:     if TrashNum<>0 then begin
  2004.                                                         TagsCHANGES[1]:=TagItem(GTMX_Active,1);
  2005.                                                         TagsCHANGES[2].ti_Tag:=TAG_END;
  2006.                                                         CurrentMethodTrash:=TRUE;
  2007.                                                         GT_SetGadgetAttrsA(GadgetMethodTrash,win,NIL,^TagsCHANGES)
  2008.                                                 end
  2009.                                                 87:     goto Values
  2010.                                                 else
  2011.                                         end
  2012.                                 end
  2013.                                 IDCMP_GADGETDOWN: begin
  2014.                                         CurrentGadget:=imsg^.iaddress;
  2015.                                         case CurrentGadget^.gadgetid of
  2016.                                                 1:      CurrentMethodFiles:=NOT(CurrentMethodFiles)
  2017.                                                 2:      CurrentMethodTrash:=NOT(CurrentMethodTrash)
  2018.                                                 else
  2019.                                         end
  2020.                                 end
  2021.                                 IDCMP_GADGETUP: begin
  2022.                                         CurrentGadget:=imsg^.iaddress;
  2023.                                         case CurrentGadget^.gadgetid of
  2024.                                                 5:      MyEndExit:=1
  2025.                                                 6:      begin
  2026.                                                         Values:
  2027.                                                         CurrentMethodFiles:=MyXTP.MoveFiles;
  2028.                                                         CurrentMethodTrash:=MyXTP.DeleteTrash;
  2029.                                                         CurrentDiskName:=MyXTP.DiskName;
  2030.                                                         CurrentFormatOptions:=MyXTP.FormatOptions;
  2031.                                                         if (FileNum<>0) or (DirNum<>0) then begin
  2032.                                                                 TagsCHANGES[1]:=TagItem(GTMX_Active,long(CurrentMethodFiles));
  2033.                                                                 TagsCHANGES[2].ti_Tag:=TAG_END;
  2034.                                                                 GT_SetGadgetAttrsA(GadgetMethodFiles,win,NIL,^TagsCHANGES)
  2035.                                                         end;
  2036.                                                         if TrashNum<>0 then begin
  2037.                                                                 TagsCHANGES[1]:=TagItem(GTMX_Active,long(CurrentMethodTrash));
  2038.                                                                 TagsCHANGES[2].ti_Tag:=TAG_END;
  2039.                                                                 GT_SetGadgetAttrsA(GadgetMethodTrash,win,NIL,^TagsCHANGES)
  2040.                                                         end;
  2041.                                                         if DiskNum<>0 then begin
  2042.                                                                 if DisplayName then begin
  2043.                                                                         TagsCHANGES[1].ti_Tag:=GTST_String; TagsCHANGES[1].ti_Data:=CurrentDiskName;
  2044.                                                                         TagsCHANGES[2].ti_Tag:=TAG_END;
  2045.                                                                         GT_SetGadgetAttrsA(GadgetDiskName,win,NIL,^TagsCHANGES)
  2046.                                                                 end;
  2047.                                                                 if DisplayOptions then begin
  2048.                                                                         TagsCHANGES[1].ti_Tag:=GTST_String; TagsCHANGES[1].ti_Data:=CurrentFormatOptions;
  2049.                                                                         TagsCHANGES[2].ti_Tag:=TAG_END;
  2050.                                                                         GT_SetGadgetAttrsA(GadgetFormatOptions,win,NIL,^TagsCHANGES)
  2051.                                                                 end
  2052.                                                         end;
  2053.                                                         goto BACK
  2054.                                                 end
  2055.                                                 7:      MyEndExit:=0
  2056.                                                 else
  2057.                                         end
  2058.                                 end
  2059.                                 IDCMP_MENUPICK: begin
  2060.                                         ChosenMenu:=imsg^.code;
  2061.                                         while NOT ((ChosenMenu=MENUNULL) or (ChosenMenu=$F8)) do begin
  2062.                                                 case ChosenMenu and $1f of
  2063.                                                         0:      begin
  2064.                                                                 case (ChosenMenu and $7e0) div 32 of
  2065.                                                                         0:      begin
  2066.                                                                                 WaitPointer(win);
  2067.                                                                                 GetRidOfForBeforeXTrash(win);
  2068.                                                                                 PreferencesXTrash;
  2069.                                                                                 GetBackForBeforeXTrash(win,CG);
  2070.                                                                                 if DiskNum<>0 then begin
  2071.                                                                                         if (DisplayOptions<>FindInnerThing(MyXTP.Formatter,"\o")) or (DisplayName<>FindInnerThing(MyXTP.Formatter,"\n")) then begin
  2072.                                                                                                 ClearMenuStrip(win);
  2073.                                                                                                 CloseWindow(win);
  2074.                                                                                                 FreeGadgets(CG);
  2075.                                                                                                 FreeMenus(MenuFields);
  2076.                                                                                                 DidIt:=RemoveAppWindow(ApplicationWindow);
  2077.                                                                                                 goto ReBuild
  2078.                                                                                         end;
  2079.                                                                                         if (ChangeASG[0]<>ChangeASG[1]) and (MyXTP.Coloured) then BackASG:=ChangeASG else begin SI:=GadgetDiskName^.SpecialInfo; BackASG:=SI^.Extension^.Pens end;
  2080.                                                                                         if DisplayName then begin
  2081.                                                                                                 SI:=GadgetDiskName^.SpecialInfo;
  2082.                                                                                                 SI^.Extension^.ActivePens:=BackASG
  2083.                                                                                         end;
  2084.                                                                                         if DisplayOptions then begin
  2085.                                                                                                 SI:=GadgetFormatOptions^.SpecialInfo;
  2086.                                                                                                 SI^.Extension^.ActivePens:=BackASG
  2087.                                                                                         end;
  2088.                                                                                 end;
  2089.                                                                                 NormalPointer(win);
  2090.                                                                         end
  2091.                                                                         1:      begin
  2092.                                                                                 MyEndExit:=0;
  2093.                                                                                 EndExit:=0
  2094.                                                                         end
  2095.                                                                         else
  2096.                                                                 end
  2097.                                                         end
  2098.                                                         else
  2099.                                                 end;
  2100.                                                 NItem:=ItemAddress(MenuFields,ChosenMenu);
  2101.                                                 ChosenMenu:=NItem^.nextselect;
  2102.                                         end
  2103.                                 end
  2104.                                 else
  2105.                         end
  2106.                 end;
  2107.                 if SIGNALS=AppBit then begin
  2108.                         if ApplicationMessage=NIL then goto BACK;
  2109.                         if (ApplicationMessage^.am_Type=MTYPE_APPICON) or (ApplicationMessage^.am_Type=MTYPE_APPWINDOW) then begin
  2110.                                 if ApplicationMessage^.am_NumArgs=0 then
  2111.                                         WindowToFront(win)
  2112.                                 else begin
  2113.                                         OldFile:=FileNum; OldDir:=DirNum; OldTrash:=TrashNum; OldDisk:=DiskNum;
  2114.                                         for i:=0 to ApplicationMessage^.am_NumArgs-1 do
  2115.                                                 AddInList(ApplicationMessage^.am_ArgList^[i].wa_Lock,ApplicationMessage^.am_ArgList^[i].wa_Name,NIL);
  2116.                                         if ((OldFile=0) and (FileNum<>0) and (OldDir=0)) or ((OldDir=0) and (DirNum<>0) and (OldFile=0)) or ((OldTrash=0) and (TrashNum<>0)) or ((OldDisk=0) and (DiskNum<>0)) then begin
  2117.                                                 ReplyMsg(p_Message(ApplicationMessage));
  2118.                                                 ClearMenuStrip(win);
  2119.                                                 CloseWindow(win);
  2120.                                                 FreeGadgets(CG);
  2121.                                                 FreeMenus(MenuFields);
  2122.                                                 DidIt:=RemoveAppWindow(ApplicationWindow);
  2123.                                                 goto ReBuild
  2124.                                         end else begin
  2125.                                                 ReplyMsg(p_Message(ApplicationMessage));
  2126.                                                 goto ReDisplay
  2127.                                         end
  2128.                                 end
  2129.                         end;
  2130.                         ReplyMsg(p_Message(ApplicationMessage));
  2131.                 end
  2132.         UNTIL MyEndExit<>-1;
  2133.  
  2134.         ClearMenuStrip(win);
  2135.         CloseWindow(win);
  2136.         FreeGadgets(CG);
  2137.         FreeMenus(MenuFields);
  2138.         DidIt:=RemoveAppWindow(ApplicationWindow);
  2139.         FreeScreenDrawInfo(scr,DI);
  2140.         FreeVisualInfo(VI);
  2141.         UnLockPubScreen(NIL,scr);
  2142.  
  2143.         if DiskNum<>0 then begin
  2144.                 SI:=GadgetDiskName^.SpecialInfo;
  2145.                 CurrentDiskName:=SI^.Buffer;
  2146.                 SI:=GadgetFormatOptions^.SpecialInfo;
  2147.                 CurrentFormatOptions:=SI^.Buffer;
  2148.         end;
  2149.  
  2150.         if MyEndExit=1 then XTrash;
  2151.  
  2152.         for opLayer:=1 to 4 do begin
  2153.                 CASE opLayer of
  2154.                         1:      TrashNode:=p_PathNode(FileList^.lh_Head);
  2155.                         2:      TrashNode:=p_PathNode(DirList^.lh_Head);
  2156.                         3:      TrashNode:=p_PathNode(TrashList^.lh_Head);
  2157.                         4:      TrashNode:=p_PathNode(DiskList^.lh_Head);
  2158.                 end;
  2159.                 WHILE p_PathNode(TrashNode^.pn_Node.ln_Succ)<>NIL DO BEGIN
  2160.                         TrashNodeBack:=p_PathNode(TrashNode^.pn_Node.ln_Succ);
  2161.                         Remove(p_Node(^TrashNode^.pn_Node));
  2162.                         dispose(TrashNode);
  2163.                         TrashNode:=TrashNodeBack
  2164.                 END
  2165.         END;
  2166.         FileNum:=0; DirNum:=0; TrashNum:=0; DiskNum:=0;
  2167. END;
  2168.  
  2169.  
  2170. PROCEDURE GetRidOfForAboutXTrash(VAR win:p_window);
  2171. VAR     DidIt   :                               boolean;
  2172. BEGIN
  2173.         win^.flags:=win^.flags or WFLG_RMBTRAP;
  2174.         DidIt:=ModifyIDCMP(win,0);
  2175.         win^.firstgadget^.nextgadget^.nextgadget^.nextgadget:=NIL
  2176. END;
  2177.  
  2178. PROCEDURE GetBackForAboutXTrash(VAR win:p_window,GadgetCycle:p_gadget);
  2179. VAR     DidIt   :                               boolean;
  2180. BEGIN
  2181.         win^.firstgadget^.nextgadget^.nextgadget^.nextgadget:=GadgetCycle;
  2182.         DidIt:=ModifyIDCMP(win,IDCMP_CLOSEWINDOW or IDCMP_VANILLAKEY or IDCMP_MENUPICK or IDCMP_GADGETUP);
  2183.         win^.flags:=win^.flags xor WFLG_RMBTRAP;
  2184.         RefreshGadgets(win^.FirstGadget,win,NIL);
  2185.         GT_RefreshWindow(win,NIL);
  2186. END;
  2187.  
  2188. PROCEDURE AboutXTrash;
  2189. LABEL   BACK;
  2190. VAR     winAbout:                               p_window;
  2191.         CG      :                               p_gadget;
  2192.         NewGadgetFields:                        newgadget;
  2193.         GadgetPrefs:                            p_gadget;
  2194.         GadgetCancel:                           p_gadget;
  2195.         GadgetEnd:                              p_gadget;
  2196.         Preferences:                            p_gadget;
  2197.         TagsCHANGES:                            array [1..10] of TagItem;
  2198.         dummy   :                               long;
  2199.         amsg    :                               p_intuimessage;
  2200.         MyEndExit:                              integer;
  2201.         CurrentGadget:                          p_Gadget;
  2202.         winBit  :                               long;
  2203.         NewMenuFields:                          array[1..4] of NewMenu;
  2204.         MenuFields:                             p_Menu;
  2205.         NItem   :                               p_menuitem;
  2206.         DidIt   :                               boolean;
  2207.         SIGNALS :                               long;
  2208.         ChosenMenu:                             long;
  2209.         ApplicationWindow:                      p_AppWindow;
  2210.         ApplicationMessage:                     p_AppMessage;
  2211. BEGIN
  2212.         CG:=NIL;
  2213.         CG:=CreateContext(^CG);
  2214.  
  2215.         scr:=LockPubScreen(NIL);
  2216.         VI:=GetVisualInfoA(scr,NIL);
  2217.         DI:=GetScreenDrawInfo(scr);
  2218.  
  2219.         TagsCHANGES[1]:=TagItem(GT_Underscore,long("_"));
  2220.         TagsCHANGES[2].ti_Tag:=TAG_END;
  2221.         NewGadgetFields:=NewGadget(10,122,160,12,"_Einstellungen",^tattr,1,
  2222.                 PLACETEXT_IN,VI,NIL);
  2223.         GadgetPrefs:=CreateGadgetA(BUTTON_KIND,CG,^NewGadgetFields,^TagsCHANGES);
  2224.  
  2225.         NewGadgetFields:=NewGadget(226,122,80,12,"Zurück",^tattr,2,
  2226.                 PLACETEXT_IN,VI,NIL);
  2227.         GadgetCancel:=CreateGadgetA(BUTTON_KIND,GadgetPrefs,^NewGadgetFields,NIL);
  2228.  
  2229.         NewGadgetFields:=NewGadget(316,122,70,12,"Ende",^tattr,3,
  2230.                 PLACETEXT_IN,VI,NIL);
  2231.         GadgetEnd:=CreateGadgetA(BUTTON_KIND,GadgetCancel,^NewGadgetFields,NIL);
  2232.  
  2233.         NewMenuFields[1]:=NewMenu(NM_TITLE,0,"Projekt",NIL,0,0,NIL);
  2234.         NewMenuFields[2]:=NewMenu(NM_ITEM,0,"Einstellungen...",NIL,0,0,NIL);
  2235.         NewMenuFields[3]:=NewMenu(NM_ITEM,0,"Ende","Q",0,0,NIL);
  2236.         NewMenuFields[4].nm_Type:=NM_END;
  2237.         MenuFields:=CreateMenusA(^NewMenuFields,NIL);
  2238.         TagsCHANGES[1].ti_Tag:=GTMN_TextAttr;
  2239.         TagsCHANGES[1].ti_Data:=^tattr;
  2240.         TagsCHANGES[2].ti_Tag:=TAG_END;
  2241.         DidIt:=LayoutMenusA(MenuFields,VI,^TagsCHANGES);
  2242.  
  2243.         TagsCHANGES[1]:=TagItem(WA_Top,10);
  2244.         TagsCHANGES[2]:=TagItem(WA_Left,20);
  2245.         TagsCHANGES[3]:=TagItem(WA_InnerHeight,139);
  2246.         TagsCHANGES[4]:=TagItem(WA_InnerWidth,400);
  2247.         TagsCHANGES[5].ti_Tag:=WA_Title;
  2248.         TagsCHANGES[5].ti_Data:="XTrash 1.01";
  2249.         TagsCHANGES[6]:=TagItem(WA_Flags,WFLG_CLOSEGADGET OR WFLG_GIMMEZEROZERO OR
  2250.                 WFLG_ACTIVATE OR WFLG_DRAGBAR OR WFLG_SMART_REFRESH OR
  2251.                 WFLG_DEPTHGADGET);
  2252.         TagsCHANGES[7]:=TagItem(WA_IDCMP,IDCMP_CLOSEWINDOW or
  2253.                 IDCMP_GADGETUP or IDCMP_VANILLAKEY or IDCMP_MENUPICK);
  2254.         TagsCHANGES[8]:=TagItem(WA_CustomScreen,long(scr));
  2255.         TagsCHANGES[9]:=TagItem(WA_Gadgets,long(CG));
  2256.         TagsCHANGES[10].ti_Tag:=TAG_END;
  2257.         winAbout:=OpenWindowTagList(NIL,^TagsCHANGES);
  2258.         winBit:=long(1) shl winAbout^.userport^.mp_SigBit;
  2259.         dummy:=SetFont(winAbout^.RPort,tfont);
  2260.  
  2261.         DidIt:=SetMenuStrip(winAbout,MenuFields);
  2262.         GT_RefreshWindow(winAbout,NIL);
  2263.  
  2264.         SetAPen(winAbout^.rport,DI^.dri_Pens^[SHADOWPEN]);
  2265.         RectFill(winAbout^.rport,0,2,63,12);
  2266.         SetAPen(winAbout^.rport,DI^.dri_Pens^[HIGHLIGHTTEXTPEN]);
  2267.         SetDrMd(winAbout^.rport,JAM1);
  2268.         Move(winAbout^.rport,52,10); dummy:=_Text(winAbout^.rport,"X",1);
  2269.         SetAPen(winAbout^.rport,DI^.dri_Pens^[TEXTPEN]);
  2270.         Move(winAbout^.rport,67,10); dummy:=_Text(winAbout^.rport,"Trash 1.01",10);
  2271.         Move(winAbout^.rport,67,22); dummy:=_Text(winAbout^.rport,"©/Programm 1992 SP/PeekerBits",29);
  2272.         Move(winAbout^.rport,67,34); dummy:=_Text(winAbout^.rport,"Autor:",6);
  2273.         Move(winAbout^.rport,67,43); dummy:=_Text(winAbout^.rport,"Stefan Plöchinger",17);
  2274.         Move(winAbout^.rport,67,52); dummy:=_Text(winAbout^.rport,"Kleiststraße 27",15);
  2275.         Move(winAbout^.rport,35,61); dummy:=_Text(winAbout^.rport,"DW- 8012 Ottobrunn",18);
  2276.         Move(winAbout^.rport,67,73); dummy:=_Text(winAbout^.rport,"programmiert in KICKPascal (MAXON GmbH)",39);
  2277.         Move(winAbout^.rport,67,78); Draw(winAbout^.rport,167,78);
  2278.         Move(winAbout^.rport,67,88); dummy:=_Text(winAbout^.rport,"XTrash 1.01 ist FreeWare. Alle Rechte",37);
  2279.         Move(winAbout^.rport,67,97); dummy:=_Text(winAbout^.rport,"liegen beim Autor. Das Programm darf",36);
  2280.         Move(winAbout^.rport,67,106); dummy:=_Text(winAbout^.rport,"nur zu unkommerziellen Zwecken frei",35);
  2281.         Move(winAbout^.rport,67,115); dummy:=_Text(winAbout^.rport,"vertrieben werden.",18);
  2282.  
  2283.         ApplicationWindow:=AddAppWindowA(1,0,winAbout,ApplicationPort,NIL);
  2284.  
  2285.         BACK:
  2286.         MyEndExit:=-1;
  2287.  
  2288.         repeat
  2289.                 amsg:=GT_GetIMsg(winAbout^.userport);
  2290.                 GT_ReplyIMsg(amsg);
  2291.                 if amsg=NIL then begin
  2292.                         ApplicationMessage:=p_AppMessage(GetMsg(ApplicationPort));
  2293.                         if ApplicationMessage<>NIL then
  2294.                                 SIGNALS:=AppBit
  2295.                         else begin
  2296.                                 SIGNALS:=_wait(AppBit or winBit);
  2297.                                 if SIGNALS=winBit then begin
  2298.                                         amsg:=GT_GetIMsg(winAbout^.userport);
  2299.                                         GT_ReplyIMsg(amsg)
  2300.                                 end else begin
  2301.                                         ApplicationMessage:=p_AppMessage(GetMsg(ApplicationPort));
  2302.                                         if ApplicationMessage=NIL then SIGNALS:=0
  2303.                                 end
  2304.                         end
  2305.                 end else
  2306.                         SIGNALS:=winBit;
  2307.                 if SIGNALS=winBit then begin
  2308.                         case amsg^.class of
  2309.                                 IDCMP_CLOSEWINDOW: MyEndExit:=0
  2310.                                 IDCMP_VANILLAKEY: begin
  2311.                                         if amsg^.code>96 then amsg^.code:=amsg^.code-32;
  2312.                                         case amsg^.code of
  2313.                                                 13:     MyEndExit:=0
  2314.                                                 27:     MyEndExit:=0
  2315.                                                 69:     begin
  2316.                                                         WaitPointer(winAbout);
  2317.                                                         GetRidOfForAboutXTrash(winAbout);
  2318.                                                         PreferencesXTrash;
  2319.                                                         GetBackForAboutXTrash(winAbout,CG);
  2320.                                                         NormalPointer(winAbout);
  2321.                                                 end
  2322.                                                 else
  2323.                                         end
  2324.                                 end
  2325.                                 IDCMP_GADGETUP: begin
  2326.                                         CurrentGadget:=amsg^.iaddress;
  2327.                                         case CurrentGadget^.gadgetid of
  2328.                                                 1:      begin
  2329.                                                         WaitPointer(winAbout);
  2330.                                                         GetRidOfForAboutXTrash(winAbout);
  2331.                                                         PreferencesXTrash;
  2332.                                                         GetBackForAboutXTrash(winAbout,CG);
  2333.                                                         NormalPointer(winAbout);
  2334.                                                 end
  2335.                                                 2:      MyEndExit:=0
  2336.                                                 3:      begin
  2337.                                                         MyEndExit:=0;
  2338.                                                         EndExit:=0
  2339.                                                 end
  2340.                                                 else
  2341.                                         end
  2342.                                 end
  2343.                                 IDCMP_MENUPICK: begin
  2344.                                         ChosenMenu:=amsg^.code;
  2345.                                         while NOT ((ChosenMenu=MENUNULL) or (ChosenMenu=$F8)) do begin
  2346.                                                 case ChosenMenu and $1f of
  2347.                                                         0:      begin
  2348.                                                                 case (ChosenMenu and $7e0) div 32 of
  2349.                                                                         0:      begin
  2350.                                                                                 WaitPointer(winAbout);
  2351.                                                                                 GetRidOfForAboutXTrash(winAbout);
  2352.                                                                                 PreferencesXTrash;
  2353.                                                                                 GetBackForAboutXTrash(winAbout,CG);
  2354.                                                                                 NormalPointer(winAbout);
  2355.                                                                         end
  2356.                                                                         1:      begin
  2357.                                                                                 MyEndExit:=0;
  2358.                                                                                 EndExit:=0
  2359.                                                                         end
  2360.                                                                         else
  2361.                                                                 end
  2362.                                                         end
  2363.                                                         else
  2364.                                                 end;
  2365.                                                 NItem:=ItemAddress(MenuFields,ChosenMenu);
  2366.                                                 ChosenMenu:=NItem^.nextselect;
  2367.                                         end
  2368.                                 end
  2369.                                 else
  2370.                         end
  2371.                 end;
  2372.                 if SIGNALS=AppBit then begin
  2373.                         if ApplicationMessage=NIL then goto BACK;
  2374.                         if (ApplicationMessage^.am_Type=MTYPE_APPICON) or (ApplicationMessage^.am_Type=MTYPE_APPWINDOW) then begin
  2375.                                 if ApplicationMessage^.am_NumArgs=0 then
  2376.                                         WindowToFront(winAbout)
  2377.                                 else for i:=0 to ApplicationMessage^.am_NumArgs-1 do
  2378.                                         AddInList(ApplicationMessage^.am_ArgList^[i].wa_Lock,ApplicationMessage^.am_ArgList^[i].wa_Name,NIL);
  2379.                                 if (FileNum<>0) or (DirNum<>0) or (TrashNum<>0) or (DiskNum<>0) then begin MyEndExit:=0; EndExit:=1 end
  2380.                         end;
  2381.                         ReplyMsg(p_Message(ApplicationMessage));
  2382.                 end
  2383.         until MyEndExit<>-1;
  2384.  
  2385.         ClearMenuStrip(winAbout);
  2386.         CloseWindow(winAbout);
  2387.         FreeMenus(MenuFields);
  2388.         FreeGadgets(CG);
  2389.         DidIt:=RemoveAppWindow(ApplicationWindow);
  2390.         FreeScreenDrawInfo(scr,DI);
  2391.         FreeVisualInfo(VI);
  2392.         UnLockPubScreen(NIL,scr);
  2393. END;
  2394.  
  2395.  
  2396. FUNCTION UpperString(upstr:str):DirNameString;
  2397. VAR     i       :                               integer;
  2398.         VariableString:                         FileString;
  2399. BEGIN
  2400.         VariableString:=upstr;
  2401.         for i:=1 to length(VariableString) do
  2402.                 VariableString[i]:=upcase(VariableString[i]);
  2403.         UpperString:=VariableString
  2404. END;
  2405.  
  2406. FUNCTION GetOptions:Boolean;
  2407. LABEL   RealTschuess,Tschuessle;
  2408. VAR     MyArguments:                            str;
  2409.         TopArgs :                               p_RDArgs;
  2410.         DidIt   :                               Boolean;
  2411.         Chop    :                               FileString;
  2412.         ProgramDOB:                             p_DiskObject;
  2413.         MyStartup:                              p_WBStartup;
  2414.         dummy   :                               long;
  2415. BEGIN
  2416.         TheDirectory:="";
  2417.         TheConfiguration:="";
  2418.         GetOptions:=TRUE;
  2419.  
  2420.         if FromWB then begin
  2421.                 MyStartup:=StartupMessage;
  2422.                 if MyStartup^.sm_NumArgs>0 then begin
  2423.                         if NameFromLock(MyStartup^.sm_ArgList^[0].wa_Lock,VariableString,256)=0 then goto Tschuessle;
  2424.                         TheDirectory:=VariableString;
  2425.                         if AddPart(VariableString,MyStartup^.sm_ArgList^[0].wa_Name,364)=FALSE then goto Tschuessle;
  2426.                         ProgramDOB:=GetDiskObjectNew(VariableString);
  2427.                         if IOErr=ERROR_OBJECT_NOT_FOUND then goto RealTschuess;
  2428.                         if ProgramDOB=NIL then goto Tschuessle;
  2429.                         TheConfiguration:=FindToolType(ProgramDOB^.do_ToolTypes,"CONFIG");
  2430.                         FreeDiskObject(ProgramDOB)
  2431.                 end
  2432.         end else begin
  2433.                 if GetCurrentDirName(TheDirectory,256)=FALSE then TheDirectory:="";
  2434.                 MyArguments:="";
  2435.                 TopArgs:=ReadArgs(MyTemplate,^MyArguments,NIL);
  2436.                 if TopArgs=NIL then begin
  2437.                         DidIt:=PrintFault(ERROR_BAD_TEMPLATE,"XTrash 1.01");
  2438.                         GetOptions:=FALSE;
  2439.                         goto RealTschuess
  2440.                 end;
  2441.                 TheConfiguration:=MyArguments;
  2442.                 FreeArgs(TopArgs);
  2443.                 if TheConfiguration="" then begin
  2444.                         if GetProgramName(VariableString,364)=FALSE then goto RealTschuess;
  2445.                         ProgramDOB:=GetDiskObjectNew(VariableString);
  2446.                         if IOErr=ERROR_OBJECT_NOT_FOUND then goto RealTschuess;
  2447.                         if ProgramDOB=NIL then goto Tschuessle;
  2448.                         TheConfiguration:=FindToolType(ProgramDOB^.do_ToolTypes,"CONFIG");
  2449.                         FreeDiskObject(ProgramDOB)
  2450.                 end
  2451.         end;
  2452.         goto RealTschuess;
  2453.  
  2454.         Tschuessle:
  2455.         GiveError("XTrash 1.01 - Argumente auswerten","Die Argumente konnten nicht"+LF+"ausgewertet werden.",NIL);
  2456.  
  2457.         RealTschuess:
  2458.         If TheDirectory="" then GiveError("XTrash 1.01 - Initialisierung","Das aktuelle Verzeichnis konnte"+LF+"nicht festgestellt werden.",NIL);
  2459.         VariableString:=UpperString(TheConfiguration);
  2460.         if (TheConfiguration="") or (VariableString="STD") then TheConfiguration:="ENVARC:XTrash.Config"
  2461. END;
  2462.  
  2463.  
  2464. BEGIN
  2465.         OpenLib(IntuitionBase,"intuition.library",36);
  2466.         OpenLib(SysBase,"exec.library",36);
  2467.         OpenLib(WorkbenchBase,"workbench.library",36);
  2468.         OpenLib(GfxBase,"graphics.library",36);
  2469.         OpenLib(DiskfontBase,"diskfont.library",36);
  2470.         OpenLib(GadtoolsBase,"gadtools.library",36);
  2471.         OpenLib(DosBase,"dos.library",36);
  2472.         OpenLib(IconBase,"icon.library",36);
  2473.         OpenLib(AslBase,"asl.library",36);
  2474.         DB:=DosBase;
  2475.  
  2476.         if ParameterStr="?" then begin
  2477.                 write("CONFIG: ");
  2478.                 readln(VariableString);
  2479.                 if SetArgStr(VariableString)=FALSE then begin writeln("XTrash 1.01: Fehler bei Argumentparsing"); EXIT end
  2480.         end;
  2481.         if GetOptions=FALSE then EXIT;
  2482.  
  2483.         InitWaitPointer;
  2484.         tattr:=TextAttr("topaz.font",8,0,0);
  2485.         tfont:=OpenFont(^tattr);
  2486.  
  2487.         VariableString:=UpperString(TheConfiguration);
  2488.         if ReadXTrashPrefs(TheConfiguration,StartXTP)=FALSE then begin
  2489.                 GiveError("XTrash 1.01 - Lade Einstellungen","Ladefehler bei den"+LF+"Einstellungen.",NIL);
  2490.                 StartXTP:=XTrashPreferences("","",-1,-1,TRUE,FALSE,"RAM:",FALSE,FALSE,"Empty","",'SYS:System/Format DRIVE \d NAME "\n" \o',-1)
  2491.         end;
  2492.         MyXTP:=StartXTP;
  2493.  
  2494.         if MyXTP.Trasher="" then MyXTP.Trasher:="RAM:";
  2495.  
  2496.         CurrentMethodTrash:=MyXTP.DeleteTrash; CurrentMethodFiles:=MyXTP.MoveFiles;
  2497.         CurrentDiskName:=MyXTP.DiskName; CurrentFormatOptions:=MyXTP.FormatOptions;
  2498.  
  2499.         new(FileList); new(DirList); new(TrashList); new(DiskList);
  2500.         InitList(FileList); InitList(DirList);
  2501.         InitList(TrashList); InitList(DiskList);
  2502.         FileNum:=0; DirNum:=0; TrashNum:=0; DiskNum:=0;
  2503.  
  2504.         ApplicationPort:=CreatePort("XTrash AppPort",0);
  2505.         AppBit:=long(1) shl ApplicationPort^.mp_SigBit;
  2506.         InitAppIcon;
  2507.  
  2508.         BACK:
  2509.         EndExit:=-1;
  2510.  
  2511.         repeat
  2512.                 ApplicationMessage:=p_AppMessage(WaitPort(ApplicationPort));
  2513.                 ApplicationMessage:=p_AppMessage(GetMsg(ApplicationPort));
  2514.                 if ApplicationMessage=NIL then goto BACK;
  2515.                 if ApplicationMessage^.am_Type<>MTYPE_APPICON then begin ReplyMsg(p_Message(ApplicationMessage)); goto BACK end;
  2516.                 if ApplicationMessage^.am_NumArgs=0 then begin
  2517.                         ReplyMsg(p_Message(ApplicationMessage));
  2518.                         AboutXTrash;
  2519.                 end else begin
  2520.                         for i:=0 to ApplicationMessage^.am_NumArgs-1 do
  2521.                                 AddInList(ApplicationMessage^.am_ArgList^[i].wa_Lock,ApplicationMessage^.am_ArgList^[i].wa_Name,NIL);
  2522.                         ReplyMsg(p_Message(ApplicationMessage));
  2523.                 end;
  2524.                 if (FileNum<>0) or (DirNum<>0) or (TrashNum<>0) or (DiskNum<>0) then EndExit:=1
  2525.         until EndExit<>-1;
  2526.  
  2527.         if EndExit=1 then begin BeforeXTrash; if EndExit<>0 then goto BACK end;
  2528.  
  2529.         DidIt:=RemoveAppIcon(ApplicationIcon);
  2530.         if diskIcon=FALSE then begin
  2531.                 FreeVec(ImageDataNorm);
  2532.                 FreeVec(ImageDataSel);
  2533.                 dispose(ImagesObject)
  2534.         end else
  2535.                 FreeDiskObject(ImagesObject);
  2536.         DeletePort(ApplicationPort);
  2537.         for opLayer:=1 to 4 do begin
  2538.                 CASE opLayer of
  2539.                         1:      TrashNode:=p_PathNode(FileList^.lh_Head);
  2540.                         2:      TrashNode:=p_PathNode(DirList^.lh_Head);
  2541.                         3:      TrashNode:=p_PathNode(TrashList^.lh_Head);
  2542.                         4:      TrashNode:=p_PathNode(DiskList^.lh_Head);
  2543.                 end;
  2544.                 WHILE p_PathNode(TrashNode^.pn_Node.ln_Succ)<>NIL DO BEGIN
  2545.                         TrashNodeBack:=p_PathNode(TrashNode^.pn_Node.ln_Succ);
  2546.                         Remove(p_Node(^TrashNode^.pn_Node));
  2547.                         dispose(TrashNode);
  2548.                         TrashNode:=TrashNodeBack
  2549.                 END
  2550.         END;
  2551.         dispose(FileList); dispose(DirList);
  2552.         dispose(TrashList); dispose(DiskList);
  2553.         FreeVec(InsidePointer);
  2554.  
  2555.         if (TheDirectory<>"") and (FromWB=FALSE) then begin
  2556.                 MyLock:=Lock(TheDirectory,SHARED_LOCK);
  2557.                 if MyLock<>0 then begin
  2558.                         LockBack:=CurrentDir(MyLock);
  2559.                         UnLock(MyLock)
  2560.                 end
  2561.         end;
  2562. END.
  2563.  
  2564.